《C语言案例实践》学生成绩管理系统.docx
《《C语言案例实践》学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《《C语言案例实践》学生成绩管理系统.docx(29页珍藏版)》请在冰豆网上搜索。
《C语言案例实践》学生成绩管理系统
常熟理工学院
2016年春季学期
《C语言案例实践》报告
题目:
学生成绩管理系统设计
学号:
092715217
姓名:
梁伟
指导教师:
赵秀兰
日期:
2016.05.10
主要包含下列内容:
(1)系统分析:
包括设计题目、设计内容以及系统功能需求分析;
(2)系统设计:
包括总体设计(主要功能模块的划分)及详细设计(各功能模块的算法设计以及对应的流程图);
(3)系统实现:
包括使用的所有变量、自定义函数、结构体的说明,以及完整源程序清单,关键代码应加注释。
(4)系统运行:
包括系统操作使用的简单说明,使用测试数据运行的结果。
(5)总结:
包括课程设计过程中的学习体会与收获,出现的问题和解决的方法,没有完成的部分及原因,对C项目实践课程的认识以及自己的建议等内容。
正文
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。
管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展要高效率的把内部活动有机的组织起来,就必须建立自身特点相适应的管理信息系统。
本组设计的是一个关于学生信息管理的数据库系统,通过这个系统,管理员可以简捷方便的对学生信息进行增加、删除、修改等功能,而用户也可以通过这个系统对学生信息进行查询等功能。
1.系统需求分析
1.1需求概述:
(1)学生信息录入功能;
(2)学生信息浏览功能;
(3)学生信息查询(或排序)功能;
(4)学生信息删除功能;
(5)学生信息修改功能;
1.2需求说明:
(1)学生信息包括姓名学号和成绩,并且要求学生号不重复。
(2)学生信息的显示要求有一定的规范格式。
(3)对学生信息应能够分别按学号及按姓名两种方式进行查询,要求能返回所有符合条件的学生的信息。
(4)对学生信息的修改应逐个地进行,在一个学生的信息的更改不影响其他的学生记录。
(5)所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能尽可能地兼容用户使用过程中的异常情况。
2.系统总体设计
一、编写目的
根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案,并写出书面文档总体设计说明书,为下一步进行详细设计做准备。
二、总体设计
1.功能划分
该系统可以按功能进行模块划分,如图1所示。
学生信息管理系统
图1系统模块图
其中:
(1)菜单选择模块完成用户命令的接受,此模块也是学生信息管理的入口,用户所要进行的各种操作均需在此模块中进行选择,并进而调用其他模块实现相应的功能。
(2)信息输入模块完成学生信息的输入功能,输入信息包括姓名学号和成绩。
(3)信息浏览模块完成已录入学生信息的显示。
(4)信息查询模块完成学生信息的查询,查询时对应有按编号查询和按姓名查询两种方式。
(5)信息修改模块完成学生信息的修改功能。
(6)信息删除功能模块完成学生信息的删除功能。
2.数据结构
本系统中主要的数据结构就是学生的信息,包含姓名学号和成绩,在处理过程中各项可以作为一个学生的不同属性来进行处理。
3.程序流程
系统的执行应从功能菜单选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。
系统的流程图如图2所示:
图2程序流程图
3.详细设计
1.数据结构
(1)性别:
emumSex{male,female};
(2)学历:
enumEducation{high,junior,college,master,doctor};
(3)日期:
StructDate
{
intyear;
intmonth;
intday;
};
(4)学生信息:
StructInfo
{
charnum[5];/*学生号*/
charname[8];/*姓名*/
enumSexsex;/*性别*/
structDatebirthday;/*出生年月*/
enumEducationeducation;/*学历*/
charduty[8];/*职务*/
doublewage;/*工资*/
charaddr[12];/*地址*/
charphone[8];/*电话*/
};
2.各个功能模块的处理流程
对应于总体设计时的系统模块图,各个功能模块的处理流程如下:
(1)信息输入模块
输入三个学生信息以初始化系统;
读入学生信息;
(2)信息浏览模块
依次输出学生信息;
(3)信息查询模块
while(继续查询)
{
if(按编号查询)
{
读入查询的学生编号;
顺序读出一个学生的信息;
if(该学生信息的编号符合条件)
输出该学生的信息;
}
}
elseif(按姓名查询)
{
读入查询的学生姓名;
顺序读出一个学生的信息;
if(该学生信息的姓名符合条件)
输出该学生的信息;
}
}
else
提示输入不合适;
提示是否继续查询;
}
(4)信息修改模版
while(继续修改)
{
提示并读入待修改的学生的编号;
顺序读出一个学生的信息;
if(该学生信息的编号符合条件)
将学生的信息进行修改;
}
显示修改后所有学生的信息;
}
(5)信息删除模块
while(继续删除)
{
提示并读入待删除的学生号;
查找是否有符合条件的学生记录;
if(有符合条件的记录)
{
while(所有学生信息未读完)
{
读出下一条记录;
if(此条记录不是待删除记录)
}
删除该学生信息记录;
}
else
提示没有符合条件的记录存在;
}
(7)信息排序模块
if(按姓名排序)
{
将第i个学生姓名和他的下一个学生姓名作对比
}
通过对比大小将学生信息交换依次排序;
}
elseif(按学号排序)
{
将第i个学生学号和他的下一个学生学号作对比
}
通过对比大小将学生信息交换依次排序;
}
}
elseif(按成绩排序)
{
将第i个学生学号和他的下一个学生学号作对比
}
通过对比大小将学生信息交换依次排序;
}
}
打印排序后的学生信息;
4.系统测试
一、设置测试数据
根据以下几个列子分析测试:
1.录入:
姓名tom学号0001成绩98
2.录入:
姓名lili学号0002成绩56
3.录入:
姓名alin学号0003成绩74
2.显示所有学生的信息。
3.增加一个学生的信息姓名john学号0004成绩88。
4.删除学生号为0002的学生信息。
5.将alin学号的信息由0003改为0005。
6.查找学号为0001的学生信息。
7.将所有学生的信息按成绩排序。
8.退出。
二、测试结果及分析
(1)学生信息录入分析图如图1所示:
(2)学生信息系统菜单界面如图2所示:
(3)显示学生信息如图3所示
(4)学生信息录入图如图4所示:
(5)学生信息删除如图5所示
(6)学生信息修改图如图6所示:
(7)学生信息查找图如图7所示:
(8)学生信息排序图如图8所示:
5.软件使用说明书
(1)根据正确的提示安装软件。
(2)Intel486以上系列、AMDK6以上系列等PC台式机和便携式电脑都可运行。
(3)打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。
操作如下:
输入三名学生信息以初始化程序
根据菜单提示输入需要的信息即可完成指令。
当信息输入正确,进入你所需要的菜单程序中:
学生信息:
显示姓名、学号、成绩。
设计总结
在本系统的开发过程中,由于组是初次开发软件,在知识、经验方面都存在着不足。
另外,在整个开发的过程中,时间也比较仓促。
因此,该系统必然会存在一些缺陷和不足。
因为对学生信息管理的整个流程不够熟悉,在需求分析时未能做到完全满足用户的需求。
尽管本管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需的。
通过开发这个系统,我组掌握了的项目基本开发过程,用到的知识巩固了我组对C语言的学习,但在这次设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法,以及与同学们之间相互帮助的精神。
附录:
部分源程序代码
#include//写入头文件
#include
#include
#include
#include
#include
typedefstructSTU{//建立链表
charname[10];
charnum[10];
intgrade;
}st;
typedefstructnode{
stdata;
structnode*next;
}node;
node*jianli();//函数定义
intse();
voidxianshi(node*head);
voidzengjia(node*head);
node*shanchu(node*head);
voidxiugai(node*head);
voidchazhao(node*head);
voidpaixu(node*head);
node*jianli()//建立函数
{
inti;
node*he,*tail,*p;
he=tail=NULL;
printf("************************************\n\t学生管理系统初始化\n************************************\n\n\n请先输入3位学生的有效信息:
\n");
for(i=0;i<3;i++)
{
p=(node*)malloc(sizeof(node));
p->next=NULL;
printf("请输入第%d位学生的信息\n",i+1);
scanf("%s%s%d",p->data.name,p->data.num,&p->data.grade);
while(atoi(p->data.num)==0||p->data.grade<0)
{
printf("您输入的信息有误,请重新输入!
");
printf("请输入第%d位学生的信息\n",i+1);
scanf("%s%s%d",p->data.name,p->data.num,&p->data.grade);
}
if(he==NULL)
he=p;
else
tail->next=p;
tail=p;
}
p=he;
system("cls");
printf("************************************\n\t学生管理系统初始化\n************************************\n\n\n\n");
while(p!
=NULL)
{
printf("姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
p=p->next;
}
printf("已录入三个基础学生信息,按任意键进入学生管理系统菜单\n");
getch();
returnhe;
}
voidmain()//主函数入口
{
inta;
node*head;
system("color2e");
head=jianli();
do{system("cls");
a=se();
switch(a)//输入选择
{
case1:
xianshi(head);break;
case2:
zengjia(head);break;
case3:
head=shanchu(head);break;
case4:
xiugai(head);break;
case5:
chazhao(head);break;
case6:
paixu(head);break;
case7:
exit(0);break;
}}while
(1);
}
intse()//菜单界面
{
inti,t;
chars[10];
char*menu[]={"***********学生管理系统**************\n\n","1:
显示学生信息\n","2:
增加学生信息\n","3:
删除学生信息\n","4:
修改学生信息\n","5:
查找学生信息\n","6:
排序学生信息\n","7:
exit\n\n","*************************************\n"};
for(i=0;i<9;i++)
printf("%s",menu[i]);
do
{
printf("请输入数字命令:
");
scanf("%s",s);
t=atoi(s);
}while(t<0||t>7);
returnt;
}
voidxianshi(node*head)//显示学生信息函数
{
node*p;
system("cls");
p=head;
printf("***********学生管理系统**************\n\n");
while(p!
=NULL)
{
printf("姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
p=p->next;
}
getch();
}
voidzengjia(node*head)//增加学生信息函数
{
node*p,*tail,*t;
system("cls");
p=head;
printf("***********学生管理系统**************\n\n");
while(p!
=NULL)
{
tail=p;
p=p->next;
}
p=(node*)malloc(sizeof(node));
p->next=NULL;
printf("请输入新增学生的学号:
");
scanf("%s",p->data.num);
while(atoi(p->data.num)==0)
{
system("cls");
printf("***********学生管理系统**************\n\n");
printf("您输入的学号有误,请重新输入!
");
printf("请输入新增学生的学号:
");
scanf("%s",p->data.num);
}
t=head;
while(t!
=NULL)
{
if(atoi(p->data.num)==atoi(t->data.num))
{
t=head;
system("cls");
printf("***********学生管理系统**************\n\n学生的学号已被使用,请重新输入学号!
\n");
printf("请输入新增学生的学号:
");
scanf("%s",p->data.num);
continue;
}
t=t->next;
}
printf("请输入该学生的名字、分数\n");
scanf("%s%d",p->data.name,&p->data.grade);
tail->next=p;
tail=p;
p=head;
system("cls");
p=head;
printf("***********学生管理系统**************\n\n");
while(p!
=NULL)
{
printf("姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
p=p->next;
}
printf("\n按任意键返回\n");
getch();
}
node*shanchu(node*head)//删除学生信息函数
{
chard[10];
node*p,*t,*flag=NULL;
system("cls");
printf("***********学生管理系统**************\n\n");
printf("请输入需要删除学生的学号:
");
scanf("%s",d);
t=head;
while(strcmp(d,t->data.num)!
=0&&t->next!
=NULL)
{
flag=t;
t=t->next;
}
if(strcmp(d,t->data.num)==0)
{
if(strcmp(d,head->data.num)==0)
{
p=head;
head=head->next;
free(p);
}
else
{
flag->next=t->next;
free(t);
}
}
else
{
printf("没有搜索到需要删除的学生信息,请核对后再输入");
getch();
}
p=head;
system("cls");
printf("***********学生管理系统**************\n\n");
while(p!
=NULL)
{
printf("姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
p=p->next;
}
printf("\n按任意键返回\n");
getch();
return(head);
}
voidxiugai(node*head)//修改学生信息函数
{
intd,m,flag;
charc[10],n[10],ex;
node*p;
p=head;
do
{system("cls");
printf("***********学生管理系统**************\n\n");
printf("按姓名查找需要修改的学生信息输入1,按学号查找需要修改的学生信息输入2\t");
scanf("%s",c);
while(atoi(c)!
=1&&atoi(c)!
=2)
{
printf("输入的指令有误,请重新输入\n");
printf("按姓名查找需要修改的学生信息输入1,按学号查找需要修改的学生信息输入2\t");
scanf("%s",c);
}
if(atoi(c)==1)
{
printf("请输入需要修改学生的姓名:
");
scanf("%s",n);
m=strcmp(n,p->data.name);
while(m!
=0&&p->next!
=NULL)
{
p=p->next;
m=strcmp(n,p->data.name);
}
if(m==0)
{
printf("\n姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
flag=1;
}
else
{
printf("没有搜索到需要修改的学生信息,请核对后再输入\n");
flag=0;
}
}
if(atoi(c)==2)
{
printf("请输入需要修改学生的学号:
");
scanf("%d",&d);
while(d!
=atoi(p->data.num)&&p->next!
=NULL)
{p=p->next;}
if(d==atoi(p->data.num))
{
printf("\n姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
flag=1;
}
else
{
printf("没有搜索到需要修改的学生信息,请核对后再输入\n");
flag=0;
}
}
if(flag==1)
{
printf("请重新输入该学生的名字、学号、分数\n");
scanf("%s%s%d",p->data.name,p->data.num,&p->data.grade);
printf("姓名:
%s学号:
%s分数:
%d\n",p->data.name,p->data.num,p->data.grade);
printf("\n修改成功!
\n还需修改学生信息请按1,退出请按任意键:
\n");
ex=getchar();
ex=getchar();
}
else
{
printf("还需删除学生信息输入1,退出请按任意键:
\n");
ex=getchar();
ex=getchar();
}
}while(ex=='1');
}
voidchazhao(node*head)//查找学生信息函数
{
intc,d,m;
charex,n[10];
node*p;
p=head;
do
{system("cls");
printf("***********学生管理系统**************\n\n");
printf("按姓名查找输入1,按学号查找输入2\t");
scanf("%d",&c);
while(c!
=1&&c!
=2)
{
printf("输入的指令有误,请重新输入");
printf("按姓名查找输入1,按学号查找输入2\t");
scanf("%d",&c);
}
if(c==1)
{
printf("请输入需要查找学生的姓名:
");
scanf("%s",n);
m=strcmp(n,p->data.name);
while(m!
=0&&p->next!
=NULL)
{
p=p->next;
m=strcmp(n,p->data.name);
}
i