学生学籍管理说明书.docx
- 文档编号:24390321
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:31
- 大小:271.55KB
学生学籍管理说明书.docx
《学生学籍管理说明书.docx》由会员分享,可在线阅读,更多相关《学生学籍管理说明书.docx(31页珍藏版)》请在冰豆网上搜索。
学生学籍管理说明书
目录
摘要1
前言2
正文3
1.采用类c语言定义相关的数据类型3
2.各模块的伪码算法3
3.程序流程图5
4.调试分析6
5.测试结果7
6.源程序(带注释)9
总结26
参考文献27
致谢28
摘要
本设计---学生学籍信息管理系统是一项繁琐的业务,用计算机实现自动化管理既可以减轻人员的劳动强度,又可以提高学校管理效率。
此程序可以输入新的学生信息,输出所有学生的学号,姓名、性别、年龄、院系,专业,出生日期,籍贯等信息;修改学生信息内容;按号查找学生信息;增加新生的信息;退出学生信息管理系统。
通过此设计过程,可以加深理解线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算的实现。
关键词:
数据结构;线性表;学籍管理
前言
数据结构是一门专业技术基础课,它对学习者的的要求很明确:
学会分析、研究计算机加工的数据结构的特性,以便为应用设计所需的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。
其次,该课程的学习过程也是复杂程序设计的训练过程,要求学习者编写的程序结构或设计的程序结构体清楚、正确、易读,符合软件工程的规范。
其过程使用链表或顺序表实现数据的录入、浏览(对于学生记录的整体浏览和逐一浏览)、添加(可以添加任何符合记录格式的学生档案记录)、删除(可以删除数据库中任一条学生记录)、修改(可以修改其中的任一条学生数据内容)、查找(可以根据学生学号,查找某学生信息,也可以查找具有相同特征的学生的集合等功能;
本设计在WindowsXP操作系统环境下使用VisualC++6.0软件开发工具,采用目前最通用的程序设计语言之一——C语言作为数据结构和算法的描述语言。
通过该题目的设计过程,可以加深理解线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算的实现。
正文
1.采用类c语言定义相关的数据类型
学生学籍的记录项用结构体structstudent表示,包括10个属性,stunum、name、zhuanye、classes
、sex、birth、age、nation、add、depar分别代表学生的学号、姓名、院系、专业、年级、性别、出生日期、年龄、民族和籍贯。
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include"string.h"
#defineN1000//N为可输入的学生总人数,可根据需要更改
structstudent//定义学生信息结构体数组
structstudent//定义学生信息结构体数组
{
charnum[9];//学号
charname[20];//姓名
chardepar[15];//院系
charzhuanye[15];//专业
charclasses[5];//班级
charsex[4];//性别
charage[3];//年龄
charnation[5];//民族
charbirth[9];//出生日期
charadd[10];//籍贯
};
2.各模块的伪码算法
1)程序包含9个模块
(1)主程序模块
voidmenu(structstudentstu[N])
函数功能:
在屏幕上显示主菜单,接收用户选择并响应用户相应操作。
(2)创建并录入信息木模块
found(structstudentstu[])
printf("请输入要录入的学生的信息:
\n");
scanf("%s",stu[i].信息);
getch();
此部分创建学生(学号,姓名,性别,民族,出生日期,入学日期,院系,班级)等信息。
(3)修改学生信息模块
voidmodify(structstudentstu[],intsum)
用来修改学生的姓名,学号,性别,名族,入学日期,院系,班级,籍贯等信息.
(4)查询学生信息模块
voidseek(structstudentstu[],intsum)
可通过学号和姓名来查看学生的个人信息。
(5)删除某学生信息模块
del(structstudentstu[],intsum)
通过学生学号来删除学生信息。
(6)显示打印已有学生信息模块
voidshow(structstudentstu[],intsum)
显示学生已有信息(学号,姓名,性别,民族,出生日期,入学日期,院系,班级)。
(7)添加学生信息模块
insert(structstudentstu[],intsum)
先输入要添加的个数,然后依次添加学生学号,姓名,性别,民族,出生日期,入学日期,院系,班级信息。
(8)对学生信息排序模块
voidrank(structstudentstu[],intsum)
(9)对班级的学生人数进行统计模块
voidcount(structstudentstu[],intsum)
此模块通过统计学生人数的学院,专业,班级信息,输出符合相应信息的学生人数。
3.函数的调用关系图
4.调试分析
a、调试中遇到的问题及对问题的解决方法
此次课程设计所研究的问题不是很难,只有一个核心算法,即进行学生学籍查询,所以总的高度比较顺利。
但在最初的设计过程中犯了一个致命的错误,即没有很好的进行整体布局,也没有定义统一的函数接口,以致程序的结构与函数的混乱。
当各模块组合在一起的时候更是无没进行调试。
故只有一切从头开始,重新分配任务,以及统一定义各函数的接口。
在调试的过程中发现当输入错误的时会发生想不到的错误,为了避免这样意外的发生,写了一个判断函数judge()以及输入函数input()对其进行改进。
当一段相同的代码在程序中多次使用并且功能相对单一时,有必要将其写成一个函数,以减少工作量,并且使程序具有更好的可读性。
在编写程序的过程中,及时对重要和难懂的程序段写注释是一个很好的习惯,无论是以后的测试还是以后的维护都能够节省相当多的时间。
调试时最先进行各函数的调试,确保无误时再进行各模块的调试,最后才是将各模块组合在一起测试完整的程序。
在调试的过程中不断地进行改进、完善。
在序能够正确运行的基础上,再对各函数进行格式的优化,加强程序的结构性,并增强程序的可读性,包括给运行界面增加相应的操作提示等,使操作界面简单而又美观。
b、算法的时间复杂度和空间复杂度。
本次课设采用使用链表或顺序表实现数据的录入,浏览,添加,修改,删除,查找。
建立一个测试的数据表,至少要有20个测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求。
若假设学生的人数为N,则:
空间复杂度为:
O(N)
时间复杂度最大为:
O(N²)
5.测试结果
该程序运行结果如下
图3功能选择
图4查询学生信息
查询学生信息可以按照学生的姓名和学号分别查询
图5修改学生信息
图5可以看出修改学生信息可以从姓名、年龄、出生日期、籍贯、院系、专业、班级、民族几个方面来分别进行修改,从而能够更好的来管理学生学籍变化情况。
图6显示学生信息
图6可以看出,该同学(dzf)男,19891213出生,汉族,来自甘肃省,所在院系为据算计,专业为信计2班。
6.源程序(带注释)
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include"string.h"
#defineN1000//N为可输入的学生总人数,可根据需要更改
structstudent//定义学生信息结构体数组
{
charnum[9];//学号
charname[20];//姓名
chardepar[15];//院系
charzhuanye[15];//专业
charclasses[5];//班级
charage[3];//年龄
charsex[4];//性别
charnation[5];//民族
charbirth[9];//出生日期
charadd[10];//籍贯
};
//从文件读入数据
intread_file(structstudentstu[])
{
FILE*sp;
inti=0;
system("cls");
if((sp=fopen("学生学籍管理系统__学生信息.txt","rt"))==NULL)//读文件,若文件不存在,则需要创建一个新的文件(文件创建在save_file函数中完成)
{
printf("\n学生学籍管理系统__学生信息文件不存在,请创建!
\n");
getch();
system("cls");
return0;
}
while((fread(&stu[i],sizeof(structstudent),1,sp))==1)//判断文件是否处在结束位置
{
if(stu[i].num==0)//若文件内容为空,则跳出循环
break;
else//若文件内容不为空,i自加1。
i++;//i为文件内结构体数组的数量
}
fclose(sp);
returni;//返回i值,代表文件中学生的人数
}
//保存学生信息(保存在文件中)
voidsave_file(structstudentstu[],intsum)
{
FILE*sp;
inti;
if((sp=fopen("学生学籍管理系统__学生信息.txt","wb"))==NULL)//若不存在此TXT文档,则创建;
{
printf("读文件错误!
\n");//创建不成功,返回menu函数;
return;
}
for(i=0;i if(fwrite(&stu[i],sizeof(structstudent),1,sp)! =1)//保存文件,sum为现有总学生人数,若未保存成功,提示"写文件错误! "; printf("写文件错误! \n"); fclose(sp); return; } //创建并录入信息 intfound(structstudentstu[]) { inti=0,x; system("cls"); printf("请输入要录入的学生的个数: \n"); scanf("%d",&x); if(x==0) return0; do//输入信息 { printf("\n请录入第%d个学生的信息: \n",i+1); printf("请录入学号: "); scanf("%s",stu[i].num); printf("\n请录入姓名: "); scanf("%s",stu[i].name); printf("\n请录入院系: "); scanf("%s",stu[i].depar); printf("\n请录入专业: "); scanf("%s",stu[i].zhuanye); printf("\n请录入班级: "); scanf("%s",stu[i].classes); printf("\n请录入性别: "); scanf("%s",stu[i].sex); printf("\n请录入年龄: "); scanf("%s",stu[i].age); printf("\n请录入出生日期(yyyymmdd): "); scanf("%s",stu[i].birth); printf("\n请录入民族: "); scanf("%s",stu[i].nation); printf("\n请录入籍贯: "); scanf("%s",stu[i].add); i++; system("cls"); }while(i save_file(stu,x);//保存学生信息致文件 printf("录入完毕,请按任意键返回"); getch(); returni;//返回创建学生的人数 } //修改学生信息 voidmodify(structstudentstu[],intsum) { inti,item,a=1;//i控制数组下标,item控制子菜单的选择 chars1[8]; FILE*sp; system("cls"); do { printf("\n\n\n请输入你要修改的学号: \n"); scanf("%s",s1);//要修改的学生学号 for(i=0;i { if(strcmp(stu[i].num,s1)==0)//若找到该生,输出该生的信息 { printf("该学生学号: %s\n",stu[i].num); printf("该学生姓名: %s\n",stu[i].name); printf("该学生院系: %s\n",stu[i].depar); printf("该学生专业: %s\n",stu[i].zhuanye); printf("该学生班级: %s\n",stu[i].classes); printf("该学生性别: %s\n",stu[i].sex); printf("该学生年龄: %s\n",stu[i].age); printf("该学生出生日期: %s\n",stu[i].birth); printf("该学生民族: %s\n",stu[i].nation); printf("该学生籍贯: %s\n",stu[i].add); a=0;//找到该生,a=0; break;//出for循环 } } if(a==1)//若没有找到该生,a=1,输出提示语句 printf("\n\n该学号不存在! 请重新输入学号: \n"); }while(a);//当a=0,即没有找到该生,则继续循环重新输入学生学号 printf("\t****************\n"); printf("\t你选择你要修改的选项: \n"); printf("\t1.*修改姓名\n"); printf("\t2.*修改年龄\n"); printf("\t3.*修改性别\n"); printf("\t4.*修改出生日期\n"); printf("\t5.*修改籍贯\n"); printf("\t6.*修改院系名称\n"); printf("\t7.*修改专业名称\n"); printf("\t8.*修改班级\n"); printf("\t9.*修改民族\n"); printf("\t0.*退出菜单\n"); printf("\t****************\n"); while (1) { printf("\n\t请选择你要进行的操作: "); scanf("%d",&item);///item控制子菜单的选择 switch(item) { case1: //修改姓名 printf("\t请输入新的姓名: "); scanf("%s",stu[i].name); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case2: //修改年龄 printf("\t请输入新的年龄: "); scanf("%s",stu[i].age); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case3: //修改性别 printf("\t请输入新的性别: "); scanf("%s",stu[i].sex); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case4: //修改出生日期 printf("\t请输入新的出生年月(yyyy.mm): "); scanf("%s",stu[i].birth); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case5: //修改籍贯 printf("\t请输入新的籍贯: "); scanf("%s",stu[i].add); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case6: //修改院系 printf("\t请输入新的院系: "); scanf("%s",stu[i].depar); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case7: //修改专业 printf("\t请输入新的专业名称: "); scanf("%s",stu[i].zhuanye); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case8: //修改班级 printf("\t请输入新的班级: "); scanf("%s",stu[i].classes); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case9: //修改民族 printf("\t请输入新的民族名称: "); scanf("%s",stu[i].nation); printf("\n\n\n修改成功! \n"); save_file(stu,sum); break; case0: return;//不修改,退出 default: printf("\t请在0到9之间选择: ");//若输入的值不在0~9,则提示 } } } //查询学生信息 voidseek(structstudentstu[],intsum) { inti,item,flag;//i控制数组下标,item控制子菜单的选择,flag为判断条件 chars1[11]; system("cls"); while (1) { system("cls"); printf("\n\n\t\t------------------\n"); printf("\t\t1.按学号查询\n"); printf("\t\t2.按姓名查询\n"); printf("\t\t3.退出本菜单\n"); printf("\t\t------------------\n"); printf("\t\t请选择子菜单编号: "); scanf("%d",&item);//选择子菜单 flag=0; switch(item) { case1: //按学号进行查找 printf("\t\t请输入要查询的学生的学号: "); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].num,s1)==0)//判断学号是否存在 {//输出 flag=1; printf("该学生学号: %s\n",stu[i].num); printf("该学生姓名: %s\n",stu[i].name); printf("该学生院系: %s\n",stu[i].depar); printf("该学生专业: %s\n",stu[i].zhuanye); printf("该学生班级: %s\n",stu[i].classes); printf("该学生性别: %s\n",stu[i].sex); printf("该学生年龄: %s\n",stu[i].age); printf("该学生出生日期: %s\n",stu[i].birth); printf("该学生民族: %s\n",stu[i].nation); printf("该学生籍贯: %s\n",stu[i].add); getch(); } if(flag==0)//当上一个if条件不成立,flag=0,学生学号不存在,输出提示; printf("\n\n\n\t\t该学号不存在! \n"); getch();break; case2: //按姓名进行查找 printf("\n\n\t\t请输入要查询的学生的姓名: "); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].name,s1)==0)//判断姓名是否存在 {//输出 flag=1; printf("该学生学号: %s\n",stu[i].num); printf("该学生姓名: %s\n",stu[i].name); printf("该学生院系: %s\n",stu[i].depar); printf("该学生专业: %s\n",stu[i].zhuanye); printf("该学生班级: %s\n",stu[i].classes); printf("该学生性别: %s\n",stu[i].sex); printf("该学生年龄: %s\n",stu[i].age); printf("该学生出生日期: %s\n",stu[i].birth); printf("该学生民族: %s\n",stu[i].nation); printf("该学生籍贯: %s\n",stu[i].add); getch(); } if(flag==0)//当上一个if条件不成立,flag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 学籍 管理 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)