简易学生信息管理系统资料.docx
《简易学生信息管理系统资料.docx》由会员分享,可在线阅读,更多相关《简易学生信息管理系统资料.docx(20页珍藏版)》请在冰豆网上搜索。
简易学生信息管理系统资料
软件开发
课程设计报告
题目:
简易学生信息管理系统的设计
院(系):
信息科学与工程学院
专业班级:
电信1902班
学生姓名:
XXX
学号:
XXXXXXX
指导教师:
XX
评分:
2021年3月2日至2021年3月6日
武昌首义学院制
软件开发课程设计任务书
一、设计(调查报告/论文)题目
简易学生信息管理系统的设计
二、设计(调查报告/论文)主要内容
目的:
(1)要求学生熟练掌握C语言或其他编程语言的基本知识和编程技能;
(2)掌握并熟练运用软件工程的方法进行软件开发;
(3)培养学生的软件开发能力、软件工程的素质和软件项目管理能力。
基本要求:
简易学生信息管理系统在学校的考评中占有重要的地位,它能够有效的管理学生的各种信息,保证工作的顺利进行。
系统的功能如下:
(1)系统以菜单方式工作;
(2)系统对学生的有效信息能进行输入、显示、添加、删除等操作;
(3)系统能够查看某个学生的相关信息。
实施步骤:
(1)完成系统总体设计,详细设计、用户界面设计;
(2)选择合适的开发工具完成系统的编码工作,添加适当的注释,增加程序的可读性;
(3)对软件进行单元和系统测试,做好测试记录;
(4)完成相关资料的整理工作,按时撰写课设报告并上交。
三、原始资料
课题讲解PPT及课题相关电子资料
四、要求的设计(调查/论文)成果
(1)用C语言(或其他程序设计语言)实现软件设计;
(2)利用学过的编程知识实现简易信息管理系统中数据结构的设计;
(3)系统的各个功能模块要求用函数的形式实现;
(4)系统操作界面友好(良好的人机交互),程序加必要的注释;
(5)按要求完成课程设计报告,格式符合学校规范标准,字数不少于2000字。
五、进程安排
根据教学大纲,课题组教师制定教学计划,安排相应的课题方案,申请所需教室和实验室,并下达给学生。
教师讲解课程设计的内容、安排及注意事项;讲解课题方案;学生选题。
学生根据课题查阅收集资料,对系统进行功能模块分析,确定系统功能模块及函数原型。
学生编写相应算法程序;上机调试,解决编译等问题及错误。
学生答辩,演示程序并运行通过,对课题进行讲解并回答老师的提问。
学生完成课程设计报告,并及时上交。
六、主要参考资料
[1]金兰,梁洁.程序设计基础:
C语言.北京:
清华大学出版社.2016.
[2]程海英.数据结构(C语言版).北京:
清华出版社.2014.
[3]谭浩强.C语言程序设计(第四版).北京:
清华大学出版社.2010.
[4]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社.2007.
指导教师(签名):
20年月日
1课程设计的目的
1)要求学生熟练掌握C语言或其他编程语言的基本知识和编程技能;
2)掌握并熟练运用软件工程的方法进行软件开发;
3)培养学生的软件开发能力、软件工程的素质和软件项目管理能力;
4)使学生通过系统分析、系统设计、编程调试,写实验报告等环节,初步掌握软件系统设计的方法和步骤,训练灵活运用程序设计语言进行软件开发的能力;
5)提高学生分析问题和解决问题的能力,提高程序设计水平,培养必要的工程实践动手。
2总体设计
简易学生信息管理系统的设计,主要内容包括输入功能、显示功能、信息的添加、删除功能、查找功能、保存功能(存入文本文件和从文件中读取)等系统功能的设计。
需要实现提示学生信息包括:
学号(11位)、姓名、性别、年龄、专业、班级等,定义结构体实现对一位同学的信息的记录。
使用链表完成基本操作功能:
学生信息添加实为链表节点的添加,学生信息的删除为链表节点删除。
简易学生信息管理系统程序,可以利用链表来完成相关的操作,原因是链表长度不固定,可以任意增删,便于我们操作。
链表各元素存储空间不连续,数据元素之间是指针相连。
链表存储的密度较小,每一个数据元素都需额外存储指向下个元素的指针。
链表的优势在于定点的删除、插入元素。
1)功能1:
添加学生的信息
采用结构体实现多个变量的输入,结构体成员有学号、姓名、性别、年龄、专业、班级等。
在添加时注意用选择语句判断存储的信息量是否已达最大,并且限制学生性别。
2)功能2:
删除学生信息
分为按学号与姓名进行查找,把某学生的学生信息删除,对被删除信息进行覆盖。
注意提示用户该学生信息不存在或者信息删除成功。
3)功能3:
查找学生信息
查找学生信息时,分为按学号与姓名进行查找,查找时,通过结构体中对应位置的元素进行对比,查找成功,打印输出学生学号、姓名、性别、年龄、专业、班级等信息,注意提示用户未找到该学生信息,和打印输出查找到的信息。
4)功能4:
修改学生信息
对于修改学生信息也是分为两个模块:
根据学生学号进行查找修改和根据学生姓名进行查找修改。
查找完成后,分别修改学生的学号、姓名、性别、年龄、专业、班级等信息。
注意提示用户未找到该学生信息,和打印输出修改完成后的信息。
5)功能5:
显示所有学生信息
这是显示所有学生的信息,使用循环的方式,遍历结构体内部成员,依次输出学生的学号、姓名、性别、年龄、专业、班级等信息。
6)功能6:
保存所有学生信息
在保存学生信息时,需要进行对保存的文件类型进行设置,便于后续用于操作文件,最后利用程序关闭文本文件。
注意提示用户保存成功。
7)功能7:
退出管理系统
在主函数中,利用多分支选择语句调用函数,注意调用system函数,调用清屏命令,然后退出管理系统。
3详细设计
3.1算法设计
简易学生信息管理系统程序由7个模块组成,程序运行时首先显示的是学生信息管理系统界面,下方各个功能菜单项,输入相应的数字,按下回车键,界面跳转到程序的主界面。
此程序一共7大功能:
1)添加学生的信息
2)删除学生信息
3)查找学生信息
4)修改学生信息
5)显示所有学生信息
6)保存所有学生信息
7)退出管理系统
流程图如图3-1所示。
图3-1系统功能模块图
3.2具体实现
1)引用头文件
#include
#include
#include
#include
#defineMAXSIZE1000
2)在进行下面操作之前,必须定义要添加学生信息的结构体
typedefstructStudent
{
charID[20];//学号为字符串
charname[30];//姓名为字符串
charsex[10];//性别为字符型
intage;//年龄为整型
intmajor[60];//专业为整型
intClass;//班级为整型
}Student;
3)
voidAddStudent(Studentstu_arr[],int*length);添加学生的信息。
输入有误
输入或添加学生信息
选择功能1
输入或者添加学生的学号、姓名、性别、年龄、专业、班级等信息,如图3-2所示。
图3-2添加学生信息流程图
在添加学生的信息时,使用的是分别给结构体成员赋值的方式,其实现的代码如下:
voidAddStudent(Studentstu_arr[],int*length)
{
chars;
if(*length==MAXSIZE)
{
printf("存储的信息量已达最大,不能再添加更多的学生信息!
\n");
return;
}
Studentstu;
printf("请输入要添加的学生学号:
");
scanf("%s",&stu.ID);
printf("请输入要添加的学生姓名:
");
scanf("%s",&stu.name);
printf("请输入要添加的学生性别\n");
printf("请输入'w'or'W','m'or'M'\n");
printf("提示(w--女,m--男):
\n");
while
(1)
{
scanf("%s",&s);
if(s=='w'||s=='W')
{
strcpy(stu.sex,"女");
break;
}
elseif(s=='m'||s=='M')
{
strcpy(stu.sex,"男");
break;
}
else
{
printf("输入错误,请重新输入!
\n");
printf("请输入'w'or'W','m'or'M'\n");
printf("提示(w--女,m--男):
\n");
}
}
printf("请输入要添加的学生年龄:
");
scanf("%d",&stu.age);
printf("请输入要添加的学生专业:
");
scanf("%s",&stu.major);
printf("请输入要添加的学生班级:
");
scanf("%d",&stu.Class);
stu_arr[*length]=stu;
(*length)++;
intin=(*length)-1;
printf("学生%s信息添加成功!
\n",stu_arr[in].name);
}
4)voidDeleteStudent(Studentstu_arr[],int*length);删除学生信息。
在删除学生信息时,主要是在链表中利用学生姓名查找,然后进行字符串比较判断,如果所输入的姓名查找到了,则就做删除操作然后释放节点空间,跳出循环;如果查找不到,则进行提示。
其部分代码如下:
voidDeleteStudent(Studentstu_arr[],int*length)
{
if(length==0)
{
printf("没有可删除的数据!
\n");
return;
}
charname[30];
printf("请输入要删除的学生姓名:
");
scanf("%s",&name);
inti,j,is_find=0;
for(i=0;i{
if(strcmp(stu_arr[i].name,name)==0)
{
is_find=1;
for(j=i;j<(*length)-1;j++)
{
stu_arr[j]=stu_arr[j+1];
}
}
}
if(is_find==0)
{
printf("未找到该学生信息!
\n");
}
else
{
(*length)--;
printf("学生%s信息删除成功!
\n",name);
}
}
5)voidFindStudent(Studentstu_arr[],intlength);查找学生信息。
查找学生信息时,分为按学号与姓名进行查找,查找时,通过结构体中对应位置的元素进行对比,查找成功,打印输出学生学号、姓名、性别、年龄、专业、班级等信息,注意提示用户未找到该学生信息,和打印输出查找到的信息。
部分代码如下:
while
(1)
{
scanf("%d",&mark);
if(mark==0||mark==1)
break;
else//输入格式不正确,有提示信息
{
printf("输入错误,请重新输入!
\n");
printf("请输入'0'or'1'\n");
printf("提示(0--按姓名查找,1--按学号查找):
\n");
}
}
if(mark==0)//按姓名查找
{
printf("请输入要查找的学生姓名:
");
scanf("%s",&name);
inti,is_find=0;
for(i=0;i{
if(strcmp(stu_arr[i].name,name)==0)
{
is_find=1;
printf("学生学号\t学生姓名\t性别\t年龄\t\t专业\t\t班级\n");
printf("%s\t%s\t\t%s\t%d\t\t%s\t%d\n",
stu_arr[i].ID,stu_arr[i].name,
stu_arr[i].sex,stu_arr[i].age,
stu_arr[i].major,stu_arr[i].Class);
}
}
if(is_find==0)
{
printf("未找到该学生信息!
\n");
}
}
6)voidUpdateStudent(Studentstu_arr[],intlength);修改学生信息。
依次修改结构体成员信息,部分代码如下:
inti,is_find=0;
for(i=0;i{
if(strcmp(stu_arr[i].name,name)==0)
{
is_find=1;
printf("姓名:
%s\n修改为:
",stu_arr[i].name);
scanf("%s",&stu_arr[i].name);
printf("学号:
%s\n修改为:
",stu_arr[i].ID);
scanf("%s",&stu_arr[i].ID);
printf("性别:
%s\n修改为:
",stu_arr[i].sex);
scanf("%s",&stu_arr[i].sex);
printf("年龄:
%d\n修改为:
",stu_arr[i].age);
scanf("%d",&stu_arr[i].age);
printf("专业:
%s\n修改为:
",stu_arr[i].major);
scanf("%s",&stu_arr[i].major);
printf("班级:
%d\n修改为:
",stu_arr[i].Class);
scanf("%d",&stu_arr[i].Class);
}
}
7)voidPrintAll(Studentstu_arr[],intlength);显示所有学生信息。
显示所有学生信息的时,在一个循环中使用指针变量逐次的输出每一个学生的学号、姓名等详细信息。
其实现代码如下:
voidPrintAll(Studentstu_arr[],intlength)
{
printf("==学生信息==\n");
printf("学生学号\t学生姓名\t性别\t年龄\t\t专业\t\t班级\n");
inti;
for(i=0;i{
printf("%s\t%s\t\t%s\t%d\t\t%s\t%d\n",
stu_arr[i].ID,stu_arr[i].name,
stu_arr[i].sex,stu_arr[i].age,
stu_arr[i].major,stu_arr[i].Class);
}
}
8)voidSave(Studentstu_arr[],intlength);保存所有学生信息。
在保存学生信息时主要用的就是文件指针,FILE*fp,fp指向某一个文件的文件信息区(是一个结构体变量),通过该文件信息区就能够访问该文件,然后对文件进行写操作。
其中用到fopen函数,其作用是用来打开一个文件;fclose函数,其作用是关闭一个文件流,释放文件指针。
其核心代码如下:
voidSave(Studentstu_arr[],intlength)
{
inti;
FILE*fp;//文件类型,用于操作文件
fp=fopen("student.txt","w");
for(i=0;i{
fprintf(fp,"%s\t%s\t\t%s\t%d\t\t%s\t%d\n",
stu_arr[i].ID,stu_arr[i].name,
stu_arr[i].sex,stu_arr[i].age,
stu_arr[i].major,stu_arr[i].Class);
}
printf("保存成功!
\n");
fclose(fp);
}
9)退出管理系统。
当用户输入“0”时,将flag赋值为0,退出管理系统,使用system函数,调用清屏命令,部分代码如下:
while(flag==1)
{
ShowMenu();//调用ShowMenu()函数
charkey;
printf(">>>>请输入操作号码>>>>");
scanf("%c",&key);
switch(key)
{
case'1':
AddStudent(stu_arr,&length);
break;
case'2':
DeleteStudent(stu_arr,&length);
break;
case'3':
FindStudent(stu_arr,length);
break;
case'4':
UpdateStudent(stu_arr,length);
break;
case'5':
PrintAll(stu_arr,length);
break;
case'6':
Save(stu_arr,length);
break;
case'0':
flag=0;//将flag赋值为0,退出管理系统
system("cls");
printf("谢谢使用!
\n");
break;
default:
break;
}
4调试与运行
4.1遇到的问题
1)程序运行显示时,中文乱码
问题:
代码完成,编译成功后,程序运行界面中文出现乱码。
解决办法:
打开CodeBlocks编译器设置,选择全局编译器设置,在对话框中输入“-fexec-charset=GBK-finput-charset=UTF-8”再重启CodeBlocks,运行界面没有乱码。
2)学号初始化和输出
问题:
初步定义时,学号定义成整型,在调试的时候,长学号无法完整的显示出来。
解决办法:
将长整型改成了char类型。
3)查找和删除
问题:
执行查找和删除语句进入循环判断时,即使查找成功或删除成功,但无法跳出循环。
解决方法:
定义变量is_find=0,查找或者删除成功后被赋值为1,跳出循环。
4.2调试
程序运行时首先显示的是学生信息管理系统界面,下方各个功能菜单项,输入相应的数字,按下回车键,界面跳转到程序的主界面,如图41所示,添加学生的信息功能,如图4-2所示,删除学生信息功能,如图43所示,查找学生信息功能,如图4-4所示,修改学生信息功能,如图4-5所示,显示所有学生信息功能,如图4-6所示,保存所有学生信息功能,如图4-7所示,退出管理系统,如图4-8所示。
图41学生信息管理系统界面图42添加学生的信息功能
图44查找学生信息功能
图43查找学生信息功能
图44修改学生信息功能图45显示所有学生信息功能
图46保存所有学生信息功能图47退出管理系统
5总结
1)此程序不足之处,如学号仅限11位没有设计出来;还比如系统要重复输入多个学生的信息,而此程序每次只能输入一位学生的信息。
2)此程序创新的地方在于并没有利用太多的链式存储结构,主要是利用结构体,对学生信息增删改查时,只需对结构体成员操作即可。
3)此程序特色就是模块分区清晰,代码易懂,注释很详细!
4)此程序改进方面,如可添加学生的电话号码、邮件、家庭地址,还有各科成绩以及排名等信息,使之更加接近于学校的学生信息管理系统!
参考文献
[1]谭浩强.C语言程序设计(第四版).北京:
清华大学出版社.2010.
[2]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社.2007.
[3]严蔚敏.数据结构(C语言版)第二版.北京:
人民邮电出版社.2015.
[4]王海文.C语言程序设计.武汉:
华中科技大学出版社.2017.
[5]金兰.程序设计基础——C语言.北京:
清华大学出版社.2016.
成
绩
评
定
项目
比例
得分
平时成绩(百分制记分)
30%
业务考核成绩(百分制记分)
70%
总评成绩(百分制记分)
100%
评定等级
优良中及格不及格
指导教师(签名):
20年月日