用链表实现学生信息存储系统方案.doc

上传人:scccc 文档编号:13730615 上传时间:2022-01-22 格式:DOC 页数:11 大小:113.50KB
返回 下载 相关 举报
用链表实现学生信息存储系统方案.doc_第1页
第1页 / 共11页
用链表实现学生信息存储系统方案.doc_第2页
第2页 / 共11页
用链表实现学生信息存储系统方案.doc_第3页
第3页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《用链表实现学生信息存储系统方案.doc》由会员分享,可在线阅读,更多相关《用链表实现学生信息存储系统方案.doc(11页珍藏版)》请在三一文库上搜索。

1、#in elude #in elude #in elude #defi ne PF printf#defi ne LEN sizeof(struct stude nt)/ 定义结构体struct stude ntchar NO20;char n ame20;int age;char sex3; /*F表示性别男,M表示性别女*/char birthday10;char address30;char phon e20;char e_mail20;struct stude nt *n ext; /下个结点;typedef struct stude nt STU;STU *head=NULL; /

2、全局指针int n,i=0;/全局变量/ 自定义函数void show_me nu();/显示菜单void menu();/执行菜单void creat_stu();/建立链表void in sert_stu();/学生信息录入void prin t_stu();/学生信浏览void search_NO();/以学号方式查询信息void search_ name(); /以姓名方式查询信息void arrage_stu();/排序void del_stu();/删除学生信息void revise_stu();/修改学生信息void save();/保存信息void main() creat_s

3、tu();men u();/ 创建链表 void creat_stu()FILE *fp;long size;STU *p1,*p2;head=(STU *)malloc(sizeof(STU);head- next=NULL;if(fp=fope n(fname.txt,r)=NULL)printf(这是新表 n);return;fseek(fp,0L,2);size=ftell(fp);if(!size)printf(这是空表 n);return;/开始创建链表rewi nd(fp); /移动到文件首p2=head- next; / 找到但前位置while(!feof(fp)p1=(STU

4、 *)malloc(sizeof(STU);fscan f(fp,%s %s %d %s %s %s %s %sn,p1-NO,p1- name,&p1-age, p1-sex,p1-birthday,p1-address,p1-ph on e,p1-e_mail);p1- next=NULL;/创建节点完if(head- next=NULL)head-n ext=p1;elsep2-n ext=p1;p2=p1;n+;p2- next=NULL;fclose(fp);/ 执行菜单void menu()int c;show_me nu ();while(1)scan f(%d, &c);swi

5、tch(c)getchar();case 1:i nsert_stu();break;case 2:pri nt_stu();break;case 3:search_NO(); break;case 4:search_ name(); break;case 5:del_stu(); break;case 6:revise_stu(); break;case 7:arrage_stu();break;case 0:exit(0);/执行菜单选项show_me nu ();/ 显示菜单void show_me nu()PF(n);PF(n 探菜单探探n);PF(tt 1.输入学生信息 n”);PF

6、(tt 2.浏览学生信息 n”);PF(tt 3.以学号方式查询信息n);PF(tt 4.以姓名方式查询信息n);PF(tt 5.删除学 生信息 n”);PF(tt 6.修 改 学生信 息 n”);PF(tt 7 排序 n ”);PF(tt 0退 出 n);PF(”探探n);PF(n 请选择 n);/ 学生信息录入void in sert_stu() /学生信息录入n=0;STU *p仁NULL,*p2=NULL;p1=(STU *)malloc(sizeof(STU);PF(n 探录入学生信息探探n);/ 录入学生信息PF(tt 输入学生学号:t);sca nf(%s,p1-NO);/学号P

7、F(tt 输入学生姓名:t);sca nf(%s,p1- name);/姓名PF(tt 输入学生年龄:t);sca nf(%d,&p1-age);/年龄PF(tt 输入学生性别:t);sca nf(%s,p1-sex);/性别PF(tt输入学生出生年月:t);sca nf(%s,p1-birthday);/出生年月PF(tt 输入学生地址:t);sca nf(%s,p1-address);/地址PF(tt输入学生电话:t);sca nf(%s,p1-pho ne);/电话PF(tt输入学生 E-mail:t);sca nf(%s,p1-e_mail);/E-mailn+;if(head- ne

8、xt=NULL)head=(STU *)malloc(LEN);head-n ext=p1;elsefor(p2=head;p2- next!=NULL;p2=p2- next); /*找到最后的结点,然后将增加的结点挂在它上面 */p2-n ext=p1;p1- next=NULL;save();保存到文件 / 学生信息浏览void prin t_stu()/STU *p=NULL;if(head=NULL) / PF(”文档中无记录!学生信浏览判断链表是否为空n);return;for(p=head-n ext;p!=NULL;p=p-n ext) /读出信息PF(探学生信息浏览探 探n)

9、;PF(tt学生学号:t%sn,p-NO);PF(tt学生姓名:t%sn,p-name);PF(tt学生年龄:t%dn,p-age);PF(tt学生性别:t%sn,p-sex);PF(tt学生出生年月:t%sn,p-birthday);PF(tt学生地址:t%sn,p-address);PF(tt学生电话:t%sn,p-phone);PF(tt学生 E-mail:t%sn,p-e_mail);PF(n);II输出信息II 学生姓名信息查找 void search_ name() II学生姓名信息查找STU *p=NULL;char n ame20;if(head=NULL) II判断链表是否为

10、空PF(文档中无记录!n);return;PF(”输入学生姓名:”);sea nf(%s, name);for(p=head-n ext;p!=NULL;p=p-n ext) /读出信息if(!strcmp(p-n ame ,n ame)PF(” 探您查找的学生是探 探n);PF(tt学生学号:t%sn,p-NO);PF(tt学生姓名:t%sn,p-name);PF(tt学生年龄:t%dn,p-age);PF(tt学生性别:t%sn,p-sex);PF(tt学生出生年月:t%sn,p-birthday);PF(tt学生地址:t%sn,p-address);PF(tt学生电话:t%sn,p-ph

11、one);PF(tt学生 E-mail:t%sn,p-e_mail);PF(n);i=1;/输出信息if(!i)PF(无该生信息!请查证:);/没找到信息时的处理/ 学生学号信息查找 void search_NO() / 学生学号信息查找STU *p=NULL;char NO2O;if(head=NULL) /判断链表是否为空PF(文档中无记录!n);return;PF(请输入学生学号:”);sca nf(%s,NO);for(p=head-n ext;p!=NULL;p=p-n ext) /读出信息if(!strcmp(p-NO,NO)PF(探您查找的学生是探探n);PF(tt学生学号:t%

12、sn,p-NO);PF(tt学生姓名:t%sn,p-name);PF(ttPF(ttPF(ttPF(ttPF(ttPF(tt学生年龄:t%dn,p-age);学生性别:t%sn,p-sex); 学生出生年月:t%sn,p-birthday);学生地址:t%sn,p-address); 学生电话:t%sn,p-phone);学生 E-mail:t%sn,p-e_mail);PF(n); i=1;if(!i)/输出信息PF(”无该生信息!请查证:);/没找到信息时的处理/ 修改学生信息void revise_stu()STU *p=NULL;if(head=NULL) /判断链表是否为空PF(文档

13、中无记录!n);return;char NO20;PF(请输入学生的学号:t);sca nf(%s,NO);for(p=head-n ext;p!=NULL;p=p-n ext)if(!strcmp(p-NO,NO)/验证信息是否正确PF( 探您要修改的学生是探 探n);PF(tt学生学号:t%sn,p-NO);PF(tt学生姓名:t%sn,p-name);PF(tt学生年龄:t%dn,p-age);PF(tt学生性别:t%sn,p-sex);PF(tt学生出生年月:t%sn,p-birthday);PF(tt学生地址:t%sn,p-address);PF(tt学生电话:t%sn,p-phon

14、e);PF(tt学生 E-mail:t%sn,p-e_mail);PF(n);/输出要修改信息i=1;PF(”探修改学号为s的学生探探n ”,NO);strcpy(p-NO,NO);PF(tt输入修改学生姓名:t);sca nf(%s,p-n ame);PF(tt输入修改学生年龄:t);sca nf(%d,&p-age);PF(tt输入修改学生性别:t);sca nf(%s,p-sex);PF(tt输入修改学生出生年月:t);sca nf(%s,p-birthday);PF(tt输入修改学生地址:t);sca nf(%s,p-address);PF(tt输入修改学生电话:t);sca nf(%

15、s,p_ph on e);PF(tt输入修改学生 E-mail:t);sca nf(%s,p-e_mail);PF(n);II输入修改信息save();if(!i)PF(”无该生信息!请查证:);I*没找到信息时的处理*/II 删除学生信息 void del_stu()STU *p=NULL;if(head=NULL)II判断链表是否为空PF(文档中无记录!n);return;elsechar NO20;PF(请输入学生的学号:t);scan f(%s,NO);for(p=head;p!=NULL;p=p-n ext)if(!strcmp(p- next-NO,NO) /验证信息是否正确PF(

16、”探您要删除的学生是探探n);PF(tt学生学号:t%sn,p-next-NO);PF(tt学生姓名:t%sn,p-next-name);PF(tt学生年龄:t%dn,p-next-age);PF(tt学生性别:t%sn,p-next-sex);PF(tt学生出生年月:t%sn,p- next-birthday);PF(tt学生地址:t%sn,p-next-address);PF(tt学生电话:t%sn,p-next-phone);PF(tt学生 E-mail:t%sn,p-next-e_mail);PF(n);/输出要删除的信息i=1;if(p-n ext- n ext)printf(第一个

17、 n);p-n ext=p-n ext-n ext;elsep- next=NULL;n-;save();return;if(!i)PF(” 无该生信息!请查证:);/没找到信息时的处理return; / 按学号排序 void arrage_stu()STU *p1,*p2;int in=0,j;if(head- next=NULL)/首先判断printf(你还没有记录,无法排序n);return ;printf(n=%d, n);p仁head-n ext;for(i n=0;i nn ext;jn ext,j+)if(j=O)第一次比较第一个和第二个节点信息if(strcmp(p1-N0,p

18、1-next-NO)比较 pl 本身和 pl 下一个节点p2=p1- n ext;p1- n ext=p1- n ext- next;p2-n ext=p1;head-n ext=p2;p仁head-next;/从新给CUR赋值/*p仁head-n ext;p仁 p2;错误:如果一个变量 =他前一个节点的 NEXT那么不可以说把另外一个变量赋 给它就可以改变它前一个节点的NEXT他只能操作后节点! !*/if(strcmp(p1-next-NO,p1-next-next-NO)比较 p1 下一个和 p1 下两个节点p2=p1- n ext;p1- n ext=p1- n ext- next;p

19、2-n ext=p1- n ext-n ext;p1- n ext- n ext=p2;if(strcmp(head- next-NO,head- next-next-NO)只有两个节点信息时直接比较他们两个p1=head-n ext;head-n ext=p1- n ext;p1- n ext=p1- n ext- n ext;head-n ext- n ext=p1;if(n=2)/只有两个节点信息时把第二个节点的next赋为空head-n ext- n ext-n ext=NULL;/ 保存信息void save()prin tf(探保存信息并结束探探n);STU *p=NULL;FIL

20、E *fp;char *file name=fname.txt;if(fp=fope n(fname.txt,w)=NULL)/出错检测printf(n打不开文件!n);return;if(head- next=NULL)printf(n信息为空!n);return;elsep=head-n ext;while(p!=NULL)fprin tf(fp,%s %s %d %s %s %s %s %sn,p-NO,p- name,p-age, p-sex,p-birthday,p-address,p-ph on e,p-e_mail);/存入文件p=p-n ext;printf(保存完毕!n);fclose(fp);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1