无头头指针双循环.docx
- 文档编号:5917597
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:58
- 大小:26.69KB
无头头指针双循环.docx
《无头头指针双循环.docx》由会员分享,可在线阅读,更多相关《无头头指针双循环.docx(58页珍藏版)》请在冰豆网上搜索。
无头头指针双循环
无头结点的双循环链表(只有头指针)
/*说明:
不同类型的结构在定义和存盘及装载时算法不同*/
#include
#include
#include
/*结构定义*/
typedefstructnode
{
charnumb[15];/*学生证号*/
charname[15];/*姓名*/
intage;/*年龄*/
charsex[2];/*性别*/
chartimf[4][12];/*缴费时间*/
floatyesf[4][5];/*四年学杂费*/
chartims[4][6];/*确定是否缴费*/
floatyzzf;/*四年总费*/
structnode*next;/*结构指针*/
structnode*pre;
}LNode,*Link;
/*变量定义*/
LNode*head,*p;
charchs,ch,sname[15];
/*函数说明*/
intmenu_select();/*主程序选择菜单*/
intmenu_delselect();/*删除选择菜单*/
intmenu_inselect();/*插入选择菜单*/
intmenu_findselect();/*查找选择菜单*/
voidmenu_prog();/*主程序执行菜单*/
voidmenu_delprog();/*删除执行菜单*/
voidmenu_inprog();/*插入执行菜单*/
voidmenu_findprog();/*查找执行菜单*/
voidplaypasword(char*s);/*密码采用*号表示*/
voidsetpasword();/*建立密码*/
voidmadpasword();/*修改密码*/
voidsave();/*保存文件*/
voidload();/*装载文件*/
LNode*inilink(LNode*head);/*初始化*/
LNode*setlink(LNode*head);/*建立链表*/
voidprintlink(LNode*head);/*显示祥细数据算法*/
voidprintlinks(LNode*head);/*输出链表*/
voidprintlinkss(LNode*head);/*逆向输出链表*/
LNode*distroylink(LNode*head);/*消链表*/
LNode*insert(LNode*head);/*插入数据*/
LNode*inserts(LNode*head);/*插入任意位置数据*/
LNode*delnumb(LNode*head);/*删除编号*/
LNode*delname(LNode*head);/*删除姓名*/
LNode*findnumb(LNode*head);/*查找编号*/
LNode*findname(charstrname[],LNode*p);/*查找姓名*/
LNode*sortdata(LNode*head);/*数据排序*/
LNode*madedata(LNode*head);/*修改数据*/
voidsortsdata(LNode*head);/*数据统计*/
intflagint(charstrnum[]);/*判字串中是否均为数字*/
intflagints(charstrnum[]);/*判字串中是否为数字或小数点*/
LNode*scandata(LNode*q);/*输入缴费信息*/
main()
{/*主程序*/
FILE*fp;
charcha[20],chb[20];
inti=0;
fp=fopen("pasword.exe","rb");
if(fp==NULL)setpasword();
elsefclose(fp);
head=NULL;/*头指针初值为空*/
clrscr();/*清屏*/
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("************************************\n");
printf("**\n");
printf("*数据结构课程设计实例*\n");
printf("**\n");
printf("*学生缴费管理系统*\n");
printf("*(无头双循链表)*\n");
printf("**\n");
printf("*作者:
孙俊杰*\n");
printf("**\n");
printf("*2008年1月1日*\n");
printf("**\n");
printf("*初始密码:
1234*\n");
printf("**\n");
printf("*数据库名:
hh.dat*\n");
printf("**\n");
printf("************************************\n");
printf("\n");
printf("\n");
fp=fopen("pasword.exe","rb");
fgets(cha,81,fp);
printf("请输入密码:
");
playpasword(chb);
while(strcmp(cha,chb)<0||strcmp(cha,chb)>0)
{
i++;
if(i==3)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("************************************\n");
printf("**\n");
printf("*密码错误无权使用!
!
!
*\n");
printf("**\n");
printf("*谢谢*\n");
printf("**\n");
printf("**\n");
printf("*如想使用本软件请与作者联系*\n");
printf("**\n");
printf("*2007年1月1日*\n");
printf("**\n");
printf("************************************\n");
printf("\n");
printf("\n");
scanf("%*c");
exit(0);
}
printf("密码错误!
!
!
\n");
printf("请输入密码:
");
playpasword(chb);
}
menu_prog();
}
voidmenu_prog()
{/*选项菜单执行系统*/
charch;
for(;;)
{
switch(menu_select())
{
case1:
if(head!
=NULL)
{
printf("\n系统中已经存在数据库!
不能新建立数据库!
!
!
");
printf("\n请退出系统后重新操作!
!
!
");
printf("\n");
printf("按任意键继续.........");
getch();
break;
}
else{
head=inilink(head);/*初始化链表算法*/
setlink(head);/*建立链表算法*/
if(head!
=NULL&&head->next!
=head)printlink(head);/*输出链表
算法*/
elseif(head->next==head)
{
free(head);head=NULL;
}
printf("\n");
printf("按任意键继续.........");
getch();
break;
}
case2:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
printf("是否输出祥细信息?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')printlink(head);/*显示祥细数据算法*/
else{
printlinks(head);/*显示数据算法*/
printlinkss(head);
}
printf("\n");
}
printf("按任意键继续.........");
getch();
break;
case3:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
menu_delprog();/*调用删除窗口*/
}
printf("按任意键继续.........");
getch();
break;
case4:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
menu_inprog();/*调用插入窗口*/
}
printf("按任意键继续.........");
getch();
break;
case5:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
menu_findprog();/*调用查找窗口*/
}
printf("按任意键继续.........");
getch();
break;
case6:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
head=madedata(head);/*修改算法*/
}
printf("按任意键继续.........");
getch();
break;
case7:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
head=sortdata(head);/*排序算法*/
}
printf("按任意键继续.........");
getch();
break;
case8:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
sortsdata(head);/*统计算法*/
}
printf("按任意键继续.........");
getch();
break;
case9:
madpasword();/*修改密码*/
printf("按任意键继续.........");
getch();
break;
case10:
save();/*将程序中数据保存到磁盘文件中*/
printf("按任意键继续.........");
getch();
break;
case11:
if(head!
=NULL)
{
printf("\n系统中已经存在数据库!
不能打开新数据库!
!
!
");
printf("\n请退出系统后重新操作!
!
!
");
printf("\n");
printf("按任意键继续.........");
getch();
break;
}
else{
load();/*将磁盘文件内容装载到内存中*/
printf("按任意键继续.........");
getch();
break;
}
case12:
if(head!
=NULL)
{
printf("\n是否保存内存中的数据?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')save();/*将程序中数据保存到磁盘文件中*/
head=distroylink(head);
}
exit(0);
}
}
}
voidmenu_delprog()
{/*选项菜单执行系统*/
inti;
for(;;)
{
i=menu_delselect();
switch(i)
{
case1:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
head=delnumb(head);/*删除编号算法*/
}
printf("按任意键继续.........");
getch();
break;
case2:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
head=delname(head);/*删除姓名算法*/
}
printf("按任意键继续.........");
getch();
break;
case3:
break;
}
if(i==3)break;
}
}
voidmenu_inprog()
{/*选项菜单执行系统*/
inti;
for(;;)
{
i=menu_delselect();
switch(i)
{
case1:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
head=insert(head);/*插入数据算法*/
}
printf("按任意键继续.........");
getch();
break;
case2:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{
head=inserts(head);/*插入数据算法*/
}
printf("按任意键继续.........");
getch();
break;
case3:
break;
}
if(i==3)break;
}
}
voidmenu_findprog()
{/*选项菜单执行系统*/
inti;
for(;;)
{
i=menu_findselect();
switch(i)
{
case1:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{/*编号查找算法*/
ch='y';
while(ch=='y')
{
p=findnumb(head);
if(p!
=NULL)
{
printf("学生证号姓名年龄性别第一学期第
二学期第三学期第四学期缴费总计\n");
printf("%s%8s%6d%6s%9s%9s%9s%9s%10.2f\n\n",p-
>numb,p->name,p->age,p->sex,p->tims[0],p->tims[1],p->tims[2],p->tims[3],p->yzzf);
printf("收费项目:
学杂费教材费住宿
费总计缴费日期\n");
printf("第1学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[0][1],p->yesf[0][2],p->yesf[0][3],p->yesf[0][4],p->timf[0]);
printf("第2学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[1][1],p->yesf[1][2],p->yesf[1][3],p->yesf[1][4],p->timf[1]);
printf("第3学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[2][1],p->yesf[2][2],p->yesf[2][3],p->yesf[2][4],p->timf[2]);
printf("第4学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[3][1],p->yesf[3][2],p->yesf[3][3],p->yesf[3][4],p->timf[3]);
}
elseprintf("数据库中无此编号的数据!
!
!
");
printf("\n是否重新查找另一个编号的记录?
(y/n):
");
scanf("%c%*c",&ch);
}
}
printf("按任意键继续.........");
getch();
break;
case2:
if(head==NULL)printf("请先建立链表后再进行操作!
");
else{/*姓名查找算法*/
printlinks(head);
chs='y';ch='y';
while(chs=='y')
{
printf("请输入要查找记录的姓名:
");
gets(sname);
p=head;
while(ch=='y')
{
p=findname(sname,p);
if(p!
=NULL)
{
printf("学生证号姓名年龄性别第一学期第
二学期第三学期第四学期缴费总计\n");
printf("%s%8s%6d%6s%9s%9s%9s%9s%10.2f\n\n",p-
>numb,p->name,p->age,p->sex,p->tims[0],p->tims[1],p->tims[2],p->tims[3],p->yzzf);
printf("收费项目:
学杂费教材费住宿
费总计缴费日期\n");
printf("第1学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[0][1],p->yesf[0][2],p->yesf[0][3],p->yesf[0][4],p->timf[0]);
printf("第2学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[1][1],p->yesf[1][2],p->yesf[1][3],p->yesf[1][4],p->timf[1]);
printf("第3学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[2][1],p->yesf[2][2],p->yesf[2][3],p->yesf[2][4],p->timf[2]);
printf("第4学年:
%11.2f%11.2f%11.2f%11.2f%
15s\n",p->yesf[3][1],p->yesf[3][2],p->yesf[3][3],p->yesf[3][4],p->timf[3]);
printf("\n是否继续查找相同姓名的记录?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')
{
p=p->next;
if(p==head)
{
printf("\n查找结束或该数据库中无此姓名的记
录!
!
!
");
break;
}
}
}
else{
printf("查找结束或该数据库中无此姓名的记录!
!
!
");
break;
}
}
printf("\n是否重新进行查找操作?
(y/n):
");
scanf("%c%*c",&chs);
}
}
printf("按任意键继续.........");
getch();
break;
case3:
break;
}
if(i==3)break;
}
}
intmenu_select()
{/*选项菜单系统*/
chars[8];
intc;
clrscr();/*清屏*/
printf("\n");
printf("\n");
printf("************************************\n");
printf("**\n");
printf("**\n");
printf("*无头双循链表基本操作窗口*\n");
printf("**\n");
printf("**\n");
printf("************************************\n");
printf("\n");
printf("01:
学生缴费系统的建立操作\n");
printf("02:
学生缴费系统的显示操作\n");
printf("03:
学生缴费系统的删除操作\n");
printf("04:
学生缴费系统的插入操作\n");
printf("05:
学生缴费系统的查找操作\n");
printf("06:
学生缴费系统的修改操作\n");
printf("07:
学生缴费系统的排序操作\n");
printf("08:
学生缴费系统的统计操作\n");
printf("09:
修改系统的密码操作\n");
printf("10:
将数据存入磁盘文件\n");
printf("11:
将磁盘文件装入内存\n");
printf("12:
退出系统\n");
do{
printf("\n");
printf("输入你的选择号:
1---12:
");
gets(s);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 头头 指针 双循环