学生信息管理系统
一.设计目的: 课程设计内容: 1.问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话, E-mail 等。 设计以学生信息管理系统,使之能提供以下功能: (1).系统以菜单方式工作; (2).学生信息录入功能(学生信息用文件保存)---输入; (3).学生信息浏览功能---输出; (4).查询,排序功能---算法: a.按学号查询; b.按姓名查询。 (5).学生信息的删除与修改。 2.功能要求 A.界面比较美观; B.有一定的容错能力。 3.函数功能描述 ⑴输入部分 通过键盘输入多位学生的学生信息。学生的信息包含有:学生姓名、性别、学 号、出生年月、年龄等。此次做的学生管理系统是利用链表而完成的程序,故第 一部分想要实现建立链表 ⑵、输出部分 输出当前已存储的学生信息 ⑶、更新部分 ①删除删除用户指定的学生信息 ,这部分的功能是输入学生的学号, 找到其在 链表中存储的结点处,并将这整个结点删除, 再把该结点的前驱结点和后驱节点 连接,来实现这个学生信息的删除. ②修改修改用户指定的学生信息 ,这部分是利用输入学生的学号, 来找到存储 该学生信息的结点,通过该结点的链域来修改其中的值域,来实现对学生信息的 修改. ⑷、查询部分 ①按名字查询输出用户查询的学生信息,这部分是利用输入学生的姓名,来找 到存储该学生信息的结点,输出该结点的值域中的内容,来实现对学生信息的查 询功能. ②按学号查询输出用户查询的学生信息,同上,只是查询条件为学号 . 4.要求与限制条件 ①.各模块间通过菜单切换和调用 ②.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需 要可相互调用。 ③.程序能够保证各模块功能的独立和数据共享。不使用全局变量则能保证函数 之间的独立性,利用形参与实参之间的数值传递来实现数据共享。 . 二.总体设计: 输出界面 选择操作 选择 9 读取文件执行freeall() 退出 系统 结束 选择 1 帮助说明Break 选择 2 录入数据 break 选择 3增加数据Break 选择 4 修改数据Break 选择 5 增加数据Break . 选择 6删除数据Break 选择 7 显示数据Break 选择 8 保存数据Break 输出: 无 效选项 Break 结束 主界面 选择录入学生信息 输入学生信 息 正确错误 录 入 学 生 信息 结束 . 不录入学 生信息 查找 利用函数找到相关结点 是否存在该 学生信息 该学生不存在 输出该 结点的值 域的内容 查询完毕 修改 调用函数查找到相关结点地 址 是否存在该 学生信息 修 改 相关 结 点 的值域 修改完毕 . 三.详细设计: 输入模块输入模块 void insert() /*插入函数*/ { int i=n,j,flag; printf(“请输入待增加的学生数:\n“); scanf(“%d“, do { flag=1; while(flag) { flag=0; printf(“请输入第 %d 个学生的学号:\n“,i+1); scanf(“%s“,stu[i].code); for(j=0;j0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail,stu[j].mail); . strcpy(stu[j].mail,temp); p= q= s=*q; *q=*p; *p=s; } } } void insert() /*插入函数*/ { int i=n,j,flag; printf(“请输入待增加的学生数:\n“); scanf(“%d“, do { flag=1; while(flag) { flag=0; printf(“请输入第 %d 个学生的学号:\n“,i+1); scanf(“%s“,stu[i].code); . for(j=0;ji;j++) if(strcmp(stu[i].code,stu[j].code)==0) { printf(“已有该学号,请检查后重新录入!\n“); flag=1; break; /*如有重复立即退出该层循环,提高判断速度*/ } } printf(“请输入第 %d 个学生的姓名:\n“,i+1); scanf(“%s“,stu[i].name); printf(“请输入第 %d 个学生的年龄:\n“,i+1); scanf(“%d“, printf(“请输入第 %d 个学生的性别:\n“,i+1); scanf(“%s“,stu[i].sex); printf(“请输入第 %d 个学生的出生年月:(格式:年.月)\n“,i+1); scanf(“%s“,stu[i].time); printf(“请输入第 %d 个学生的地址:\n“,i+1); scanf(“%s“,stu[i].add); printf(“请输入第 %d 个学生的电话:\n“,i+1); scanf(“%s“,stu[i].tel); printf(“请输入第 %d 个学生的 E-mail:\n“,i+1); scanf(“%s“,stu[i].mail); . if(flag==0) { i=i; i++; } } while(in+m); n+=m; printf(“录入完毕!\n\n“); sort(); } void del() /* 删除信息 */ { int i,j,flag=0; char s1[LEN+1]; printf(“请输入要删除学生的学号:\n“); scanf(“%s“,s1); for(i=0;in;i++) if(strcmp(stu[i].code,s1)==0) { flag=1; for(j=i;jn-1;j++) . stu[j]=stu[j+1]; } if(flag==0) printf(“该学号不存在!\n“); if(flag==1) {