电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

学籍信息记录薄

31页
  • 卖家[上传人]:kms****20
  • 文档编号:40641510
  • 上传时间:2018-05-26
  • 文档格式:DOC
  • 文档大小:432.50KB
  • / 31 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、程序设计报告HUNAN UNIVERSITY程序设计训练报 告学生姓名 易伟浪 殷婷婷 学生学号 20110704115 20110704106 专业班级 测控技术与仪器一班 指导老师 洪跃山 2012 年 7 月4 日一 需求分析随着计算机技术的日益发达,计算机软件功能已涉入生活的诸多方面。其中对学生籍贯信息的管理就是其中的一个小小的方面。利用计算机软件来管理学生籍贯信息能够克服传统的文档管理的不足。通过计算机实现学生籍贯信息管理薄具有存储信息量大,方便查询,修改,添加,删除,浏览等传统纸质文档不具备的良好功能。二 程序功能说明 1.功能分析说明图:录入学生籍贯信息查询学生籍贯信息浏览学生籍贯信息修改学生籍贯信息删除学生籍贯信息按学号查询主菜单按姓名查询学生籍贯信息记录薄2.各项功能说明:a.主菜单:用于显示系统主模块信息,供用户选择。b.录入学生籍贯信息:用来将员工信息输入到计算机中,并保存到数据文件中,此模块还具有添加学生籍贯信息的功能。c.查询学生籍贯信息:可按学号和姓名查找学生籍贯信息。d.浏览学生籍贯信息:将系统中已有学生籍贯信息全部列出。e.修改学生籍贯信息:根据学号进行

      2、查询,修改指定字段内容。f.删除学生籍贯信息:删除指定学号的学生籍贯信息。 以上模块可由用户选择执行,另外,当用户运行此程序时,必须判断学生信息是否曾经保存过。若学生籍贯信息事先未保存,必须先进行学生籍贯信息的录入。三 软件基本操作 先打开源程序,编译,运行。然后根据提示输入相关内容。具体如下:1. 若学生籍贯信息已存在(即data.dat文件被创建,且不为空),输入Y或y,进入主界面。若学生籍贯信息已存在则按其他键,进入主界面。如图所示(主界面):2. 输入要选择的项目(选择1),进入界面(按照提示进行输入):a. 若学籍信息已保存过,则输入的信息添加到文件中。b. 若学学籍信息未保存过,输入的信息组成链表首次存到文件中。c. 若不再继续添加,则输入其他键,此时程序会将调用print()函数将文件中信息显示出来。再输入除n或N的其他键,保存刚输入的内容。d. 最后保存完毕时,输入任意键返回主界面。e. 若输入相同的学号,程序会报错,输入时即使不按学号顺序输入,该程序最终也会按学号从小到大排序。3. 输入2时:程序会调用print()函数将文件中保存信息读出来。再按任意键返回主界面。如

      3、图所示:4. 输入3时,则进入查询界面。如图: a. 若选择1,则按学号查询。输入要查询的学号。如图: b. 若选择2,则按姓名查询。输入要查询的姓名。如图: 查询完毕时,按任意键返回主界面。5. 输入4时,进入删除操作,输入要删除的学号,则会删除对应的信息。如图:按任意键返回主界面。重新浏览籍贯信息。如图:28号钟汉良已被删除。6. 输入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()函数。其代码为

      4、: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()返回头指针,该指针指向的内容未初始化,其内容保存从第二个节点开始。3.create_list()函数 用来创建链表的头指针,不过该指针指向的节点无学生籍贯信息记录,仅用来记录链表的头节点位置。其源代码为:struct student *create_list()struct student* head;head=(struct student*)malloc(sizeof(struct student);head-next=NULL;return head;4.

      5、menu()函数: 该函数通过参数传入头指针,主要是界面的显示以及多个函数的调用,其流程图如下:1234输入选项6籍贯信息浏览籍贯信息查询籍贯信息录入输入错误籍贯信息修改籍贯信息删除退出系统开始结束5主界面其他 其源代码为: 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.学生籍贯信息删除 |n);printf( | |n);printf( | 5.学生籍贯信息修改 |n);printf( | |n);printf( | 6.退出系统 |n);printf( |_|n); print

      6、f(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(亲按任意键返回主界面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

      7、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类型的数据。将链表写入文件中时,一次写入一个节点。先让指针指在第二个节点(第一个节点实际无任何内容),写入第二个节点,然后指针继续往后移,直到指针指向空为止。6.readdata()函数: 该函数用来将data.dat(信息事先以录入)文件中的数据读出来,返回头指针,供后续模块进行浏览,查询,编辑。具体代码如下: struct student *readdata()struct student *head,*p,*s;FILE *fp;head=create

      8、_list();p=head;while(p-next!=NULL)p=p-next;if(fp=fopen(data.dat,rb)=NULL)printf(打开文件出错!n);return NULL;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()函数:该函数具有首次录入,再次添加的功能,并调用savadata()函数将信息保存到data.dat文件中。再次添加时调用readdata()函数将文件中的信息读出来。结束接入第一个含信息节点向链表中添加节点(其链表中的节点顺序按照学生学号从小到大

      9、排列)保存开始输入头指针 判断是否为链表?否是 是否 继续添加信息?是否 是否保存?是否其大致流程图为:其源代码为: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=(struct 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)“否”(任意键)

      10、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;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(

      11、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;elsebreak; 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);return; p=head; printf(学号t姓名t性别t地址n);while(p-next!=NULL)p=p-next; printf(%-8d%-8s%-8s%-8sn,p-num,p-na

      12、me,p-sex,p-address);当输出链表信息到屏幕上时,该函数一次输入一个节点信息,然后指针移到下一个节点位置,利用循环语句循环输入节点信息,知道指针为空。、9. deletelist()函数:该函数作用为通过学号检索删除链表中的节点(相应学籍信息),并将删除后剩下的信息保存到文件中。其源代码为: void deletelist(struct student *head)struct student *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);该函数主要通过循环语句来实现其删除的功能的,首先让指针指向第一个含学籍信息的节点,判断学号是否与要删除的学号相同,如果相同则删除该节点信息,跳出

      13、循环,若不同,则指针往后移动,直到其学号相等或指针直到链表结尾处为止。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);printf( | | | |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(请输

      14、入要查询的学号n);fflush(stdin);scanf(%d,&n);printf(学号t姓名t性别t地址n);while(p-next!=NULL)p=p-next;if(p-num=n)printf(%-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(查询完毕!n);break;default:printf(-输入错误,请重新输入-n);return;11. change()函数:该函数主要功能是对学籍信息的修改,对学号,姓名,地址,性别的修改。通过修改前

      15、的学号检索来进行修改。该函数允许修改后的学号与其其他学生的学号相同(为了避免2个同学学号均搞错不能修改的问题)。由于版面问题,其大致流程图见下一页:显示修改前的信息和修改界面开始 输入修改前 的学号学号是否 存在?否是输入所选择的修改项目1 输入正确的学号 输入正确的姓名输入正确的性别输入正确的地址 输出错误 提示语输出错误提示语结束234其他其源代码为:void change(struct student *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

      16、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;case 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

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

      《学籍信息记录薄》由会员kms****20分享,可在线阅读,更多相关《学籍信息记录薄》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.