学籍信息记录薄

上传人:kms****20 文档编号:40641510 上传时间:2018-05-26 格式:DOC 页数:31 大小:432.50KB
返回 下载 相关 举报
学籍信息记录薄_第1页
第1页 / 共31页
学籍信息记录薄_第2页
第2页 / 共31页
学籍信息记录薄_第3页
第3页 / 共31页
学籍信息记录薄_第4页
第4页 / 共31页
学籍信息记录薄_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《学籍信息记录薄》由会员分享,可在线阅读,更多相关《学籍信息记录薄(31页珍藏版)》请在金锄头文库上搜索。

1、程序设计报告HUNAN UNIVERSITY程序设计训练报 告学生姓名 易伟浪 殷婷婷 学生学号 20110704115 20110704106 专业班级 测控技术与仪器一班 指导老师 洪跃山 2012 年 7 月4 日一 需求分析随着计算机技术的日益发达,计算机软件功能已涉入生活的诸多方面。其中对学生籍贯信息的管理就是其中的一个小小的方面。利用计算机软件来管理学生籍贯信息能够克服传统的文档管理的不足。通过计算机实现学生籍贯信息管理薄具有存储信息量大,方便查询,修改,添加,删除,浏览等传统纸质文档不具备的良好功能。二 程序功能说明 1.功能分析说明图:录入学生籍贯信息查询学生籍贯信息浏览学生籍

2、贯信息修改学生籍贯信息删除学生籍贯信息按学号查询主菜单按姓名查询学生籍贯信息记录薄2.各项功能说明:a.主菜单:用于显示系统主模块信息,供用户选择。b.录入学生籍贯信息:用来将员工信息输入到计算机中,并保存到数据文件中,此模块还具有添加学生籍贯信息的功能。c.查询学生籍贯信息:可按学号和姓名查找学生籍贯信息。d.浏览学生籍贯信息:将系统中已有学生籍贯信息全部列出。e.修改学生籍贯信息:根据学号进行查询,修改指定字段内容。f.删除学生籍贯信息:删除指定学号的学生籍贯信息。 以上模块可由用户选择执行,另外,当用户运行此程序时,必须判断学生信息是否曾经保存过。若学生籍贯信息事先未保存,必须先进行学生

3、籍贯信息的录入。三 软件基本操作 先打开源程序,编译,运行。然后根据提示输入相关内容。具体如下:1. 若学生籍贯信息已存在(即data.dat文件被创建,且不为空),输入Y或y,进入主界面。若学生籍贯信息已存在则按其他键,进入主界面。如图所示(主界面):2. 输入要选择的项目(选择1),进入界面(按照提示进行输入):a. 若学籍信息已保存过,则输入的信息添加到文件中。b. 若学学籍信息未保存过,输入的信息组成链表首次存到文件中。c. 若不再继续添加,则输入其他键,此时程序会将调用print()函数将文件中信息显示出来。再输入除n或N的其他键,保存刚输入的内容。d. 最后保存完毕时,输入任意键返

4、回主界面。e. 若输入相同的学号,程序会报错,输入时即使不按学号顺序输入,该程序最终也会按学号从小到大排序。3. 输入2时:程序会调用print()函数将文件中保存信息读出来。再按任意键返回主界面。如图所示:4. 输入3时,则进入查询界面。如图: a. 若选择1,则按学号查询。输入要查询的学号。如图: b. 若选择2,则按姓名查询。输入要查询的姓名。如图: 查询完毕时,按任意键返回主界面。5. 输入4时,进入删除操作,输入要删除的学号,则会删除对应的信息。如图:按任意键返回主界面。重新浏览籍贯信息。如图:28号钟汉良已被删除。6. 输入5时,进行学籍信息修改,输入要修改的原始学号,进入修改界面

5、。如图:a. 输入1,修改学号。如图操作: b. 输入2,修改姓名。如图操作: c. 输入3,修改性别。如图操作: d. 输入4,修改地址。如图操作: 输入y或Y,可继续修改。7.输入6,退出系统。四软件设计详细内容1.采用的主要数据类型和目录: #include#include#include#include#includestruct studentint num; /学号 char name20;char sex5;char address20;struct student *next;2.main()函数: main()函数中,主要是判断文件是否保存过。并调用menu()函数。其代码为

6、:void main()char flag0;struct student *p1;printf(曾几何时,学籍信息是否保存过?“是”输入Y或y,“否”按任意键n);fflush(stdin);scanf(%c,&flag0);if(flag0=Y|flag0=y)p1=readdata();elsep1=create_list();menu(p1);getch();该函数通过if语句输入不同的头指针,若文件以保存过,则调用readdata()函数从文件中建立链表,返回头指针。若文件未保存过,这通过调用create_list()返回头指针,该指针指向的内容未初始化,其内容保存从第二个节点开始。

7、3.create_list()函数 用来创建链表的头指针,不过该指针指向的节点无学生籍贯信息记录,仅用来记录链表的头节点位置。其源代码为:struct student *create_list()struct student* head;head=(struct student*)malloc(sizeof(struct student);head-next=NULL;return head;4.menu()函数: 该函数通过参数传入头指针,主要是界面的显示以及多个函数的调用,其流程图如下:1234输入选项6籍贯信息浏览籍贯信息查询籍贯信息录入输入错误籍贯信息修改籍贯信息删除退出系统开始结束5

8、主界面其他 其源代码为: void menu(struct student *head)int choice;char flag2=Y;for(;)printf( _n);printf( | | | |n);printf( | | 学生籍贯信息记录薄 | |n);printf( | |_| |n);printf( | |n);printf( | 1.学生籍贯信息录入 |n);printf( | |n);printf( | 2.学生籍贯信息浏览 |n);printf( | |n);printf( | 3.学生籍贯信息查询 |n);printf( | |n);printf( | 4.学生籍贯信息删

9、除 |n);printf( | |n);printf( | 5.学生籍贯信息修改 |n);printf( | |n);printf( | 6.退出系统 |n);printf( |_|n); printf(n美女帅哥们,请输入要选择的项目n); scanf(%d,&choice); switch(choice) case 1:input(head);printf(亲按任意键返回主界面n); getch();break;case 2:print(head);printf(亲按任意键返回主界面n);getch();break;case 3:search(head);printf(亲按任意键返回主界面

10、n);getch();break;case 4:deletelist(head);printf(亲按任意键返回主界面n);getch();break;case 5:while(flag2=Y|flag2=y)change(head);printf(是否继续修改“是”(Y或y)n);fflush(stdin);scanf(%c,&flag2);printf(亲按任意键返回主界面n);getch();break;case 6:exit(0);default:printf(输入错误,请重新输入n);5.savadata()函数: 该函数用来保存录入,修改,添加,删除后的信息。将信息保存到data.d

11、at文件中,用户再次运行此程序时,就不必再次输入信息。具体代码如下:void savadata(struct student *head)struct student *p=head-next;FILE *f;if(f=fopen(data.dat,wb)=NULL)printf(打开文件出错!);return;while(p)fwrite(p,sizeof(struct student),1,f);p=p-next;fclose(f);该函数中,以只写方式读写,写入的时候是按数据项写入,即:一次写入一个struct student类型的数据。将链表写入文件中时,一次写入一个节点。先让指针指在

12、第二个节点(第一个节点实际无任何内容),写入第二个节点,然后指针继续往后移,直到指针指向空为止。6.readdata()函数: 该函数用来将data.dat(信息事先以录入)文件中的数据读出来,返回头指针,供后续模块进行浏览,查询,编辑。具体代码如下: struct student *readdata()struct student *head,*p,*s;FILE *fp;head=create_list();p=head;while(p-next!=NULL)p=p-next;if(fp=fopen(data.dat,rb)=NULL)printf(打开文件出错!n);return NUL

13、L;while(!feof(fp)s=(struct student*)malloc(sizeof(struct student);fread(s,sizeof(struct student),1,fp);if(feof(fp)break;if(s=NULL)printf(错误n);break;p-next=s;p=s;s-next=NULL;fclose(fp);return head;该函数中先以调用create_list()函数创建无有用信息的struct student类型的数据,并返回指向它的指针,作为链表的头指针。7. input()函数:该函数具有首次录入,再次添加的功能,并调用

14、savadata()函数将信息保存到data.dat文件中。再次添加时调用readdata()函数将文件中的信息读出来。结束接入第一个含信息节点向链表中添加节点(其链表中的节点顺序按照学生学号从小到大排列)保存开始输入头指针 判断是否为链表?否是 是否 继续添加信息?是否 是否保存?是否其大致流程图为:其源代码为:void input(struct student* head)struct student *p,*s,*q;char flag=Y,flag1;int num1;p=head;while(p-next!=NULL)p=p-next;if(head-next=NULL)s=(str

15、uct student*)malloc(sizeof(struct student);printf(请输入学号n);fflush(stdin);scanf(%d,&s-num);num1=s-num; printf(请输入姓名n);fflush(stdin);gets(s-name);printf(请输入性别n);fflush(stdin);gets(s-sex);printf(请输入地址n);fflush(stdin);gets(s-address);p-next=s;s-next=NULL;while(flag=Y|flag=y) printf(是否继续添加“是”(y或Y)“否”(任意键)

16、n);fflush(stdin);scanf(%c,&flag);if(flag=Y|flag=y)s=(struct student*)malloc(sizeof(struct student); printf(请输入学号n);fflush(stdin);scanf(%d,&s-num);num1=s-num; p=head-next;while(p!=NULL)if(p-num=num1)printf(你个小傻瓜,居然输入相同的学号,快点重新输入n); printf(请输入学号n); fflush(stdin); scanf(%d,&s-num); num1=s-num;p=p-next;

17、p=head-next;printf(请输入姓名n);fflush(stdin);gets(s-name);printf(请输入性别n);fflush(stdin);gets(s-sex);printf(请输入地址n);fflush(stdin);gets(s-address);if(s-numnum)head-next=s;s-next=p;elsewhile(p-next!=NULL) if(s-numnext-num&s-nump-num)q=p-next;p-next=s;s-next=q;p=p-next;if(s-nump-num)p-next=s;s-next=NULL;else

18、break; print(head);printf(是否保存所输入的数据n);printf(如果否请输入n或N,是输入任意符号n);fflush(stdin);scanf(%c,&flag1);if(flag1!=N)&(flag1!=n)savadata(head);该函数会将学号从小到大接成链表,并存到文件中。8. print()函数:该函数作用为将链表中的全部信息向屏幕输出。其源代码为:void print(struct student *head)struct student *p;if(head=NULL|head-next=NULL)printf(n-没有学生籍贯信息记录-n);r

19、eturn; p=head; printf(学号t姓名t性别t地址n);while(p-next!=NULL)p=p-next; printf(%-8d%-8s%-8s%-8sn,p-num,p-name,p-sex,p-address);当输出链表信息到屏幕上时,该函数一次输入一个节点信息,然后指针移到下一个节点位置,利用循环语句循环输入节点信息,知道指针为空。、9. deletelist()函数:该函数作用为通过学号检索删除链表中的节点(相应学籍信息),并将删除后剩下的信息保存到文件中。其源代码为: void deletelist(struct student *head)struct s

20、tudent *p=head-next,*s=head;int Num; printf(请输入要删除的学号n);fflush(stdin);scanf(%d,&Num);while(p!=NULL) if(p-num=Num) s-next=p-next; free(p); printf(-太碉了,居然删除成功-n); break; s=p; p=p-next; savadata(head); if(s=NULL)printf(你输入的学号不存在n);该函数主要通过循环语句来实现其删除的功能的,首先让指针指向第一个含学籍信息的节点,判断学号是否与要删除的学号相同,如果相同则删除该节点信息,跳出

21、循环,若不同,则指针往后移动,直到其学号相等或指针直到链表结尾处为止。10. search()函数:该函数作用为提供学号和姓名的检索,并显示出检索的内容。其大致流程图为:显示主界面输入错误按学号查询按姓名查询显示查询后的信息显示查询后的信息开始 输入要选择的查询方式 12其他输入学号输入姓名结束其源代码为:void search(struct student *head)int x,n;struct student *p;char temp20;p=head;if(head=NULL|head-next=NULL)printf(-学生学籍信息为空-n);return;printf( _n);p

22、rintf( | | | |n);printf( | | 查询方式 | |n);printf( | |_| |n);printf( | |n);printf( | 1.按学号查询 |n);printf( | |n);printf( | 2.按姓名查询 |n);printf( |_|n);printf( 请选择查询方式n);scanf(%d,&x);switch(x)case 1:printf(请输入要查询的学号n);fflush(stdin);scanf(%d,&n);printf(学号t姓名t性别t地址n);while(p-next!=NULL)p=p-next;if(p-num=n)pri

23、ntf(%-8d%-8s%-8s%-8sn,p-num,p-name,p-sex,p-address);if(p-next=NULL)printf(查询完毕!n);break;case 2:printf(请输入要查询的学生姓名n);fflush(stdin);scanf(%s,temp);printf(学号t姓名t性别t地址n);while(p-next!=NULL)p=p-next;if(strcmp(p-name,temp)=0)printf(%-8d%-8s%-8s%-8sn,p-num,p-name,p-sex,p-address);if(p-next=NULL)printf(查询完毕

24、!n);break;default:printf(-输入错误,请重新输入-n);return;11. change()函数:该函数主要功能是对学籍信息的修改,对学号,姓名,地址,性别的修改。通过修改前的学号检索来进行修改。该函数允许修改后的学号与其其他学生的学号相同(为了避免2个同学学号均搞错不能修改的问题)。由于版面问题,其大致流程图见下一页:显示修改前的信息和修改界面开始 输入修改前 的学号学号是否 存在?否是输入所选择的修改项目1 输入正确的学号 输入正确的姓名输入正确的性别输入正确的地址 输出错误 提示语输出错误提示语结束234其他其源代码为:void change(struct st

25、udent *head)int choice,NUM;struct student *p;p=head-next;printf(请输入要修改的学生的学号n);fflush(stdin);scanf(%d,&NUM);while(p-num!=NUM)p=p-next;if(p=NULL)break;if(p!=NULL)printf(修改前的信息为n); printf(学号t姓名t性别t地址n); printf(%-8d%-8s%-8s%-8sn,p-num,p-name,p-sex,p-address);printf(_n);printf(| |n);printf(| 1.学号 |n);pr

26、intf(|-|n);printf(| 2.姓名 |n);printf(|-|n);printf(| 3.性别 |n);printf(|-|n);printf(| 4.地址 |n);printf(|_|n);printf(n请输入要修改的内容n);fflush(stdin);scanf(%d,&choice);switch(choice)case 1:printf(请输入正确的学号n);fflush(stdin);scanf(%d,&p-num);break;case 2:printf(亲爱的,请输入要修改的姓名n);fflush(stdin);scanf(%s,p-name);break;c

27、ase 3:printf(Hello,请输入性别n);fflush(stdin);scanf(%s,p-sex);break;case 4:printf(帅哥哥,请输入地址!速度要快哦!n);fflush(stdin);scanf(%s,p-address);break;default:printf(你太可怜了!输入竟然错误n);printf(修改后的信息为n); printf(学号t姓名t性别t地址n); printf(%-8d%-8s%-8s%-8sn,p-num,p-name,p-sex,p-address);savadata(head);elseprintf(你太差了吧!鄙视你!居然输

28、入错误的学号n);五.设计体会 对于本次课程设计,感慨颇多。的确,从拿到题目到完成整个编程,从理论到实践,其间,我们学到了很多的东西,不仅巩固以前所学过的知识,还学会了团结合作的重要性。通过这次程序设计,我们懂得了理论与实践相结合起来是很重要的,只有把所学的理论知识和实践相结合起来,才能真正提高自己的实际动手能力,才能真正为社会服务。在设计过程中,难免会遇到各种各样的问题,因此查找资料,双方协商,双方的合作与分工就显得尤为重要。总之,在此次的程序设计中我们收获良多,可以说是一个小小的成就吧!六附录 1.每人完成的主要工作: 本程序设计是由易伟浪与殷婷婷同学共同完成。其中易完成的主要是creat_list()函数,input()函数,deletelist()函数,readdata()函数,savadata()函数的编写以及此文档的四、五部分。殷完成的主要是menu()函数,print()函数,search()函数,change()函数的编写以及此文档一二三部分的编写。2参考文献: C语言程序设计教程李丽娟版,人们邮电出版社; C语言从入门到精通2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号