




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流C语言课程设计 学生信息管理系统.精品文档.c语言及数据结构与算法课程设计题目 : 学生信息管理系统 专 业: 姓 名: 学 号: 同组其他学生(学号): 2013年月 日目 录一、需求分析3二、总体设计3三、详细设计5四、调试与测试6五、测试结果7六、用户手册9七、附录9一、需求分析每年九月份都有大量新生来到学校报道,使学校管理学生工作量增大,为此我们设计一学生信息管理系统,学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。使之能提供以下功能:(1)系统以菜单方式工作(2)学生信息录入功能-输入(3)学生信息浏览功
2、能-输出(4)查询、排序功能-算法按学号查询、按姓名查询、学生信息的删除与修改(可选项)二、总体设计组成框图主函数主菜单欢迎界面查询按姓名按学号录入删除浏览修改退出录入浏览查询开始密码是否正确主菜单1录入学生信息2浏览学生信息3-查询学生信息4-删除学生信息5-修改学生信息0-退出系统重新输入密码是否正确确删除修改退出结束流程图NYY开始申请新空间输入各项数据显示数据结束开始录入 浏览指针p指向头结点P=p-next输出指针的数据 P=NULL?NY结束查询 修改&删除输入要删除或修改的学号输入姓名或学号P指针的学号与输入的是否相同P=p-nextP指针的学号与姓名是否与输入的相同? NN Y
3、 Y输出数据 修改p的各项数据或将p=p-next结束结束 三、详细设计主函数通过在while循环结构中嵌入switch分支结构实现操作选择功能。(1)Record录入函数建立一个包含学生全部信息的结构体,申请空间,其指针为p0,存入学生各项对应的数据。(2)Insert插入函数:按输入的数据存储在一个stu类型的指针里,若原来链表里没有元素,则将此作为第一个元素;若原来的链表里有元素,则将指向头结点指针存储的学号与头指针下一个的学号大小进行比较,小的在前大的在后,之后指向头结点处的指正后移,进行比较,直到尾结点为止。在进行比较的while函数内,每比较一次,计算总人数的TOTAL_NUM自加
4、。(3)Display浏览函数:将传给Display函数的指针P所指向的结构体的各项数据输出以便核对信息。(4)DisplayAll浏览函数:指针指向链表头结点,在if语句中嵌套do-while语句将学生信息按学号从大到小进行逐一输出。(5)Query查询函数:首先使用switch语句生成菜单,实现操作选择功能。分三个部分按学号查询、按姓名查询和取消返回上一层。按学号查询时调用while语句对学号检索,再调用if语句进行判断,最后输出想要查询的信息。按姓名查询的方法跟按学号查询的一样。(6)Del删除函数:使用while语句进行检索,直接删除学生信息。(7)Change修改函数:建立devis
5、e函数,生成菜单,用switch语句进行分叉选择功能,选择项目进行相应的信息输入。在Change函数中使用while语句进行检索后再调用devise函数修改信息。实现学生信息修改。四、调试与测试1、进行多次运行,发现电话那栏的电话一打长就会显示一样的数字,打短的数字就可以。我们原本是使用长整型来定义电话号码,想说空间不够,后来改用字符型,用字符串记录电话号码程序运行结果正确。2、程序设计初就在考虑退出与返回有什么差别,如果返回了主菜单那退出用什么,关于这个问题看了许多网上的资料,发现许多程序都有exit(0)的函数,所以去查了不少关于exit的函数内容,最后退出就用了exit(0),但是又提醒
6、说要编写exit函数,之后发现要加入的头文件,程序可以正常运行。3、程序在180行显示说readData函数不可以返回值,所以在if条件句中将return 0删除了,不过这个程序在学校的机房即使不删return 0也是可以运行的,关于这点很是不解,还有待解决。五、测试结果1、进入系统界面,输入密码,超过三次会自动退出。2、选1时录入学生信息,编辑完后会继续显示菜单3、选2浏览学生信息 ,之后继续返回菜单界面,为节省空间菜单界面暂不截图4、选择3查询学生信息会有按学号与按姓名查询。下图是先按学号查询的截图。5、按姓名查询时,如果查无此人会显示“没有该学生信息,请核对。”之后返回上一层,按姓名查询
7、。显示学生信息后可以选择取消返回主菜单。6、选择4删除学生,输入学号删除学生的信息。之后会返回主菜单7选择5修改学生信息,按学号输入,之后按显示输入即可。用几组测试数据进行测试算法设计的正确性。(附上程序运行的截图)六、用户手册1程序一开始会显示欢迎界面,按要求输入密码,3次错误会退出程序。2 密码正确后会显示主菜单,按要求输入您的需求。七、附录源程序清单和结果:源程序要加注释。结果要包括测试数据和运行结果。/* Note:Your choice is C IDE */#include #include #include #include #include #define NULL 0#def
8、ine LEN sizeof(struct student)#define FILE_DATA_PATH c:student.txt struct student long int num; char name20; int age; char sex4; char birthday10; char address30; char tele_num13; char E_mail20; struct student *next;int TOTAL_NUM = 0;struct student *head = NULL;void welcome();void mainmenu();void rec
9、ord();void insert(struct student *stu);void display(struct student *stu);void displayAll();void query();void query_by_num();void query_by_name();void readData();void writeData();void freeAll();void del();void change();void devise(struct student *p);int main() char userPWD7; int i;welcome(); for(i =
10、0; i 3; i+) printf(n密码为123n); printf(n请输入您的密码:); scanf(%s, userPWD); if (strcmp(userPWD,123)=0) /密码正确,显示主菜单 mainmenu(); break; else if (i num); printf(请输入学生的姓名:); scanf(%s,p0-name); printf(请输入学生的年龄:); scanf(%d,&p0-age); printf(请输入学生的性别:); scanf(%s,p0-sex); printf(请输入学生的出生年月:); scanf(%s,p0-birthday);
11、 printf(请输入学生的地址:); scanf(%s,p0-address); printf(请输入学生的电话:); scanf(%s,p0-tele_num); printf(请输入学生的E-mail:); scanf(%s,p0-E_mail); insert(p0); printf(该学生的信息为:n); printf(); printf(学号t姓名t年龄t性别t出生年月tt地址t电话tE-mailn); display(p0);void insert(struct student *stu)/根据学号对学生进行排序/struct student *p0, *p1, *p2; p1
12、= head; p0 = stu; if(head = NULL) head = p0; p0-next = NULL; else while(p0-num p1-num)&(p1-next != NULL) p2 = p1; p1 = p1-next; if(p0-num num) if(head = p1) head = p0; else p2-next = p0; p0-next = p1; else p1-next = p0; p0-next = NULL; TOTAL_NUM+;void display(struct student *p) printf(%ldt%st%dt%st%
13、st%st%st%sn, p-num, p-name, p-age, p-sex, p-birthday, p-address, p-tele_num, p-E_mail);/浏览学生信息void displayAll() struct student *p; printf(学生总数:%dn, TOTAL_NUM); p = head; if(head != NULL) printf(n学号t姓名t年龄t性别t出生年月t地址t电话tE-mailn); printf(); do display(p); p = p-next; while(p != NULL); printf(n);/查询学生信息
14、void query() int choice; choice = -1; do printf(n); printf(+-+n); printf(| 按学号查询 请按 1 |n); printf(| 按姓名查询 请按 2 |n); printf(| 取消 请按 0 |n); printf(+-+n); printf(请输入您的选择:); scanf(%d, &choice); switch(choice) case 0: return; case 1:query_by_num();break; case 2:query_by_name(); break; default: printf(n无效
15、选项!);break; while(choice != 0);/按学号查询学生信息void query_by_num() int num; struct student *p1; printf(请输入学生的学号:); scanf(%ld, &num); if(head=NULL) printf(无学生记录!n); return; p1=head; while(num!=p1-num & p1-next!=NULL) p1=p1-next; if(num = p1-num) printf(n学号t姓名t年龄t性别t出生年月t地址t电话tE-mailn); printf(); display(p1
16、); else printf(没有该学生记录,请核对!);/按姓名查询学生信息void query_by_name() char name20; struct student *p1; printf(请输入学生的姓名:); scanf(%s, name); if(head=NULL) printf(无学生记录!n); return; p1=head; while(strcmp(name, p1-name) & p1-next!=NULL) p1=p1-next; if(!strcmp(name, p1-name) printf(n学号t姓名t年龄t性别t出生年月t地址t电话tE-mailn);
17、 printf(); display(p1); else printf(没有该学生记录,请核对!);/写入文件void writeData() FILE* fp;/文件指针 struct student *p; fp = fopen(FILE_DATA_PATH, w); if (!fp) printf(文件打开错误!); return; fprintf(fp,%dn, TOTAL_NUM); for(p = head; p!= NULL; p= p-next) fprintf(fp,%ldt%st%dt%st%st%st%st%sn, p-num, p-name, p-age, p-sex,
18、 p-birthday, p-address, p-tele_num, p-E_mail); fclose(fp); void freeAll() struct student *p1, *p2; p1=p2=head; while(p1) p2=p1-next; free(p1); p1=p2; /读取文件void readData() FILE* fp;/文件指针 struct student *p1, *p2; fp = fopen(FILE_DATA_PATH, r); if (!fp) printf(文件打开错误!); fscanf(fp,%dn, &TOTAL_NUM); head
19、 = p1 = p2 = (struct student *)malloc(LEN); fscanf(fp,%ldt%st%dt%st%st%st%st%sn, &p1-num, p1-name, &p1-age, p1-sex, p1-birthday, p1-address, &p1-tele_num, p1-E_mail); while(!feof(fp) p1 = (struct student *)malloc(LEN); fscanf(fp,%ldt%st%dt%st%st%st%st%sn, &p1-num, p1-name, &p1-age, p1-sex, p1-birthd
20、ay, p1-address, &p1-tele_num, p1-E_mail); p2-next = p1; p2 = p1; p2-next = NULL; fclose(fp);/删除学生信息void del() struct student *p1, *p2; long int num; if(head = NULL) printf(无学生记录!n); return; printf(请输入您要删除的学生的学号:); scanf(%ld, &num); p1 = head; while(num != p1-num & p1-next != NULL) p2=p1; p1=p1-next;
21、 if(num=p1-num) if(p1=head) head=p1-next; else p2-next=p1-next; free(p1); TOTAL_NUM-; else printf(没有该学生记录,请核对!n);/修改学生信息void change() struct student *p1, *p2; long int num; if(head = NULL) printf(无学生记录!n); return; printf(请输入您要修改的学生的学号:); scanf(%ld, &num); p1=head; while(num !=p1-num & p1-next != NULL) p2=p1; p1=p1-next; if(num=p1-num) devise(p1); else printf(没有该学生记录,请核对!n);void devise(struct student *p) int choice; choice=-1; do printf(请选择您要修改的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 版权工作述职报告
- 施工现场安全教育的重要性与实施方案试题及答案
- 新能源汽车在国民经济中的作用与战略意义研究试题及答案
- 节奏与旋律的关系分析试题及答案
- 护送学员考试题及答案
- 电商直播对农产品销售的影响试题及答案
- 特定条件下的化学反应试题及答案
- 物理实验中的控制变量法试题及答案
- 小学教师教育教学与反思的自我评估试题及答案
- 商业银行数字化转型策略实施效果与2025年合规风险控制报告
- 广东省2024-2025学年佛山市普通高中教学质量检测生物试卷(二)高三试卷(佛山二模)
- 档案法律法规知识试题及答案
- 第四单元《比例尺》(单元设计教案)-2024-2025学年六年级下册数学青岛版
- 2025人教版七年级下册生物期末学业质量检测试卷(含答案)
- 2024年同等学力申硕《英语》试题真题及答案
- 七年级道德与法治学情分析
- 清洗清洁功能无人机
- 富士数码相机finepix-S205EXR使用说明书简体中文版
- 【MOOC】《学术交流英语》(东南大学)章节中国大学慕课答案
- 环保公司简介范文6篇范文
- 健康行业健康管理规范
评论
0/150
提交评论