《学生信息管理系统程序.doc》由会员分享,可在线阅读,更多相关《学生信息管理系统程序.doc(23页珍藏版)》请在课桌文档上搜索。
1、wordC语言上机实践报告专业:冶金工程班 级:姓 名:学 号:1、 题目学生信息管理系统设计l 学生信息包括:学号,某某,年龄,性别,出生年月,地址, ,等。l 试设计一学生信息管理系统,使之能提供以下功能:a) 系统以菜单方式工作b) 学生信息录入功能学生信息用文件保存-输入c) 学生信息浏览功能-输出d) 查询、排序功能-算法(1) 按学号查询(2) 按某某查询e) 学生信息的删除与修改可选项1、 系统功能模块结构图2、 数据结构设计与用法说明#includestdio.h#includestdlib.h#includestring.h/*定义结构体用作创建链表*/typedef str
2、uct z1char no11; /学生学号char name15; /学生某某int age; /学生年龄char sex; /学生性别 char birthday8; /学生出生年月char address20; /学生住址char tel12; /学生联系 char e_mail20; /学生struct z1 *next; /指向下一链表STUDENT;/*声明用户自定义函数*/STUDENT *init();STUDENT *create();STUDENT *del(STUDENT *h);STUDENT *insert(STUDENT *h);STUDENT *revise(ST
3、UDENT *h);void print(STUDENT *h);void search1(STUDENT *h);void search2(STUDENT *h);void save(STUDENT *h);int menu_select();void inputs(char *prompt,char *s,int count);/*主函数,用于选择功能*/void main()STUDENT *head;head=init(); /初始化链表表头for(;)switch(menu_select()case 0:head=init();break; /初始化case 1:head=creat
4、e();break; /创建列表case 2:head=insert(head);break; /插入节点case 3:save(head);break; /以文件形式保存case 4:print(head);break; /显示case 5:search1(head);break; /搜索学号case 6:search2(head);break; /搜索某某case 7:head=del(head);break; /删除case 8:head=revise(head);break; /修改case 9:exit(0); /退出程序/*目录选择函数,返回用户输入的数字*/int menu_se
5、lect()char *menu=*菜单*, 0. 初始化链表, 1. 输入学生信息, 2. 插入学生信息, 3. 保存学生信息, 4. 显示学生信息, 5. 按学号查找学生信息, 6. 按某某查找学生信息, 7. 删除指定学号的学生信息, 8. 修改指定学号的学生信息, 9. 退出系统;int c,i;for(i=0;i=11;i+)printf( %sn,menui);doprintf(n请选择09中的某一个选项:n);scanf(%d,&c);while(c10);return c;/*初始化函数,作用是返回空指针初始化链表*/STUDENT *init()return NULL;/*创
6、建函数,输入学生信息*/STUDENT *create()STUDENT *h=NULL,*info;for(;)info=(STUDENT *)malloc(sizeof(STUDENT); if(!info) printf(n内存不足); return NULL; inputs(输入学号:,info-no,11); if(info-no0=)break;inputs(输入某某:,info-name,15);printf(输入年龄:);scanf(%d,&info-age);printf(输入性别编号(0.男 1.女):);scanf(%s,&info-sex);printf(输入出生年月(
7、XXXX/XX):);scanf(%s,info-birthday);inputs(输入地址:,info-address,20);inputs(输入 :,info-tel,12);inputs(输入:,info-e_mail,20);info-next=h;h=info;return h;/*输入函数,用于判断输入的字符是否超出程序定义防止数据溢出*/void inputs(char *prompt,char *s,int count) char p255; do printf(prompt); scanf(%s,p); if(strlen(p)count) printf(n太长了!n); w
8、hile(strlen(p)count); strcpy(s,p);/*插入函数,插入学生成绩*/STUDENT *insert(STUDENT *h)STUDENT *p,*q,*info;char s11;printf(请输入插入点的学生学号n);scanf(%s,s);printf(n请输入新的学生信息n);info=(STUDENT *)malloc(sizeof(STUDENT);inputs(输入学号:,info-no,11); inputs(输入某某:,info-name,15);printf(输入年龄:);scanf(%d,&info-age);printf(输入性别编号(0.
9、男 1.女):);scanf(%s,&info-sex);printf(输入出生年月(XXXX/XX):);scanf(%s,info-birthday);inputs(输入地址:,info-address,20);inputs(输入 :,info-tel,12);inputs(输入:,info-e_mail,20);info-next=NULL;p=h;q=h; while(strcmp(p-no,s)&p!=NULL) q=p;p=p-next;if(p=NULL)if(p=h)h=info;elseq-next=info;else if(p=h)info-next=p;h=info;el
10、seinfo-next=p;q-next=info; printf(n已经插入了%s这个学生n,info-name); return(h);/*保存函数,以文件的形式保存学生信息*/void save(STUDENT *h)FILE *fp;STUDENT *p;char outfile50;printf(请输入保存文件的文件名,例如 c:f1te.txt:n);scanf(%s,outfile); if(fp=fopen(outfile,wb)=NULL) printf(不能打开文件n); exit(1); printf(n正在保存.n); p=h; while(p!=NULL) fwrit
11、e(p,sizeof(STUDENT),1,fp); p=p-next; fclose(fp); printf(-保存成功!-n);/*显示函数,显示学生信息*/void print(STUDENT *h)int i=0;STUDENT *p;p=h; printf(nnn*学生*n); printf(|学号 | 某某 |年龄|性别|出生年月| 地址 | | |n);printf(|-|-|-|-|-|-|-|-|n); while(p!=NULL) i+; printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|n,p-no,p-name,p-age,p-s
12、ex,p-birthday,p-address,p-tel,p-e_mail); p=p-next; printf(*end*n);/*搜索函数,按学号搜索学生信息并显示*/void search1(STUDENT *h)STUDENT *p;char s11; printf(请输入你要查找的同学的学号n); scanf(%s,s); p=h; while(strcmp(p-no,s)&p!=NULL) p=p-next; if(p=NULL) printf(n没有学号为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 某某 |年龄|性别|出生年月
13、| 地址 | | |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail); printf(*end*n); /*搜索函数,按某某搜索学生信息并显示*/void search2(STUDENT *h)STUDENT *p;char s15; printf(请输入你要查找的同学的某某n); scanf(%s,s); p=h; while(strcmp(p-name,s)&p!
14、=NULL) p=p-next; if(p=NULL) printf(n没有某某为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 某某 |年龄|性别|出生年月| 地址 | | |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail); printf(*end*n); /*删除函数,删除指定学号的学生信息*/STUDENT *d
15、el(STUDENT *h) STUDENT *p,*q; char s11; printf(请输入要删除的学生的学号n); scanf(%s,s); q=p=h; while(strcmp(p-no,s)&p!=NULL) q=p; p=p-next; if(p=NULL) printf(n链表中没有学号为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 某某 |年龄|性别|出生年月| 地址 | | |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%
16、13s|n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail); printf(*end*n); printf(请按任意键删除n); getchar(); if(p=h)h=p-next;elseq-next=p-next;free(p); printf(n已经删除学号为%s的学生n,s); return h;/*修改函数,修改指定学号的学生信息*/STUDENT *revise(STUDENT *h)STUDENT *p,*q;char s11;printf(请输入您希望修改的学生学号n);scanf(%s,s);prin
17、tf(n 请输入新的学生信息n);p=h;q=h;while(strcmp(p-no,s)&p!=NULL)q=p;p=p-next;inputs(输入学号:,p-no,11); inputs(输入某某:,p-name,15);printf(输入年龄:);scanf(%d,&p-age);printf(输入性别编号(0.男 1.女):);scanf(%s,&p-sex);printf(输入出生年月(XXXX/XX):);scanf(%s,p-birthday);inputs(输入地址:,p-address,20);inputs(输入 :,p-tel,12);inputs(输入:,p-e_mai
18、l,20);return (h);3、 程序结构search2()函数流程图4、 各模块的功能1) 主函数:循环进展目录选择2) 目录选择函数:输出目录,将用户输入的选择项返回给主函数3) 初始化函数:返回空指针,对链表指针进展初始化4) 创建函数:建立链表,输入学生信息5) 输入函数:判断输入的字符是否超出数组定义防止数据溢出6) 插入函数:在指定学号后建立新的结点插入新的学生信息7) 保存函数:将链表中的信息以二进制文件的形式保存8) 显示函数:以表格形式显示学生信息9) 搜索函数1:按学号搜索学生信息并显示10) 搜索函数2:按某某搜索学生信息并显示11) 删除函数:删除指定学号的学生信
19、息12) 修改函数:修改指定学号的学生信息5、 试验结果1) 初始界面2) 输入学生信息3) 显示学生信息4) 插入学生信息5) 删除学生信息6) 修改学生信息7) 按学号查找学生信息8) 按某某查找学生信息9) 保存学生信息10) 初始化链表11) 退出系统6、 设计中涉与的知识点l 变量的定义、初始化和使用l 结构体的定义、初始化和使用l 数组的定义、初始化和使用l 函数的定义、声明和使用l 链表的创建、初始化、修改、删除和使用l 文件的创建和使用l 指针的使用l for循环、do while 循环、while 循环和 switch 语句的使用l if语句的使用7、 体会这是我第一次编写具
20、有菜单功能的C程,所以参考了学生成绩管理系统的源程序。我先把程序从头到尾阅读完,弄清楚每一行程序的目的是什么,自己在编写时需不需要进展修改、删除或者优化。将程序阅读完以后,我开始编写自己的学生信息管理系统。尽管有类似的程序作为参考,但我仍然发现有很多地方需要我自己进展修改、衔接。我差不多花了一个下午的时间进展编写,然后开始调试,从最初的98个error调整到能够正常link,然后再对程序中无法按照我设计思路正常运行的局部一步一步进展调试。这又差不多花掉了我一个下午的时间。程序编写完成之后,我开始着手写实践报告。对于一个有着三百多行的程序,画程序图花费了我两天的时间。终于到此刻,我的C语言时间报
21、告即将完成。在途中,我经历过很多挫折,也考虑过放弃,但我庆幸我最终坚持下来了,因为此时我所体会到的成就感是对我这些日子不断努力的最大的回报。我是一个信奉完美主义的人,要么不做要么就要做到自己能够做到的最好。对于我来说,我喜欢我能够把一件事情完整地做出成果来。通过这次的编程,我顺带复习了上学期所学的C语言,为9月份的计算机2级考试也作好了准备;更重要的是,我找出了自己在C语言上的薄弱环节,为我接下来的学习指明了方向。8、 参考文献l C语言程序设计第2版人民邮电 姚琳 屈微 著l C语言程序设计上机指导与习题第2版 人民邮电 姚琳 屈微 黄晓璐 著9、 附录:程序清单#includestdio.
22、h#includestdlib.h#includestring.htypedef struct z1 char no11;char name15;int age;char sex; char birthday8;char address20;char tel12;char e_mail20;struct z1 *next;STUDENT;STUDENT *init();STUDENT *create();STUDENT *del(STUDENT *h);STUDENT *insert(STUDENT *h);STUDENT *revise(STUDENT *h);void print(STUD
23、ENT *h);void search1(STUDENT *h);void search2(STUDENT *h);void save(STUDENT *h);int menu_select();void inputs(char *prompt,char *s,int count);void main()STUDENT *head;head=init();for(;)switch(menu_select()case 0:head=init();break;case 1:head=create();break;case 2:head=insert(head);break;case 3:save(
24、head);break;case 4:print(head);break;case 5:search1(head);break;case 6:search2(head);break;case 7:head=del(head);break;case 8:head=revise(head);break;case 9:exit(0);int menu_select()char *menu=*菜单*, 0. 初始化链表, 1. 输入学生信息, 2. 插入学生信息, 3. 保存学生信息, 4. 显示学生信息, 5. 按学号查找学生信息, 6. 按某某查找学生信息, 7. 删除指定学号的学生信息, 8.
25、修改指定学号的学生信息, 9. 退出系统;int c,i;for(i=0;i=11;i+)printf( %sn,menui);doprintf(n请选择09中的某一个选项:n);scanf(%d,&c);while(c10);return c;STUDENT *init()return NULL;STUDENT *create()STUDENT *h=NULL,*info;for(;)info=(STUDENT *)malloc(sizeof(STUDENT); if(!info) printf(n内存不足); return NULL; inputs(输入学号:,info-no,11); i
26、f(info-no0=)break;inputs(输入某某:,info-name,15);printf(输入年龄:);scanf(%d,&info-age);printf(输入性别编号(0.男 1.女):);scanf(%s,&info-sex);printf(输入出生年月(XXXX/XX):);scanf(%s,info-birthday);inputs(输入地址:,info-address,20);inputs(输入 :,info-tel,12);inputs(输入:,info-e_mail,20);info-next=h;h=info;return h;void inputs(char
27、*prompt,char *s,int count) char p255; do printf(prompt); scanf(%s,p); if(strlen(p)count) printf(n太长了!n); while(strlen(p)count); strcpy(s,p);STUDENT *insert(STUDENT *h)STUDENT *p,*q,*info;char s11;printf(请输入插入点的学生学号n);scanf(%s,s);printf(n请输入新的学生信息n);info=(STUDENT *)malloc(sizeof(STUDENT);inputs(输入学号:
28、,info-no,11); inputs(输入某某:,info-name,15);printf(输入年龄:);scanf(%d,&info-age);printf(输入性别编号(0.男 1.女):);scanf(%s,&info-sex);printf(输入出生年月(XXXX/XX):);scanf(%s,info-birthday);inputs(输入地址:,info-address,20);inputs(输入 :,info-tel,12);inputs(输入:,info-e_mail,20);info-next=NULL;p=h;q=h; while(strcmp(p-no,s)&p!=N
29、ULL) q=p;p=p-next;if(p=NULL)if(p=h)h=info;elseq-next=info;else if(p=h)info-next=p;h=info;elseinfo-next=p;q-next=info; printf(n已经插入了%s这个学生n,info-name); return(h);void save(STUDENT *h)FILE *fp;STUDENT *p;char outfile50;printf(请输入保存文件的文件名,例如 c:f1te.txt:n);scanf(%s,outfile); if(fp=fopen(outfile,wb)=NULL
30、) printf(不能打开文件n); exit(1); printf(n正在保存.n); p=h; while(p!=NULL) fwrite(p,sizeof(STUDENT),1,fp); p=p-next; fclose(fp); printf(-保存成功!-n);void print(STUDENT *h)int i=0;STUDENT *p;p=h; printf(nnn*学生*n); printf(|学号 | 某某 |年龄|性别|出生年月| 地址 | | |n);printf(|-|-|-|-|-|-|-|-|n); while(p!=NULL) i+; printf(|%-8s|
31、%-8s|%4d|%4c|%8s|%14s|%11s|%13s|n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail); p=p-next; printf(*end*n);/*搜索函数,按学号搜索学生信息并显示*/void search1(STUDENT *h)STUDENT *p;char s11; printf(请输入你要查找的同学的学号n); scanf(%s,s); p=h; while(strcmp(p-no,s)&p!=NULL) p=p-next; if(p=NULL) printf(n没有学号为%s的学生n,
32、s); else printf(nnn*找到了*n); printf(|学号 | 某某 |年龄|性别|出生年月| 地址 | | |n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|n,p-no,p-name,p-age,p-sex,p-birthday,p-address,p-tel,p-e_mail); printf(*end*n); void search2(STUDENT *h)STUDENT *p;char s15; printf(请输入你要查找的同学的某某n); scanf(%s,s); p=h; while(strcmp(p-name,s)&p!=NULL) p=p-next; if(p=NULL) printf(n没有某某为%s的学生n,s); else printf(nnn*找到了*n); printf(|学号 | 某某 |年龄|性别|出生年月| 地址 | | |n); printf(|-|-