《C语言案例实践》学生成绩管理系统.docx

上传人:b****6 文档编号:5743438 上传时间:2022-12-31 格式:DOCX 页数:29 大小:155.38KB
下载 相关 举报
《C语言案例实践》学生成绩管理系统.docx_第1页
第1页 / 共29页
《C语言案例实践》学生成绩管理系统.docx_第2页
第2页 / 共29页
《C语言案例实践》学生成绩管理系统.docx_第3页
第3页 / 共29页
《C语言案例实践》学生成绩管理系统.docx_第4页
第4页 / 共29页
《C语言案例实践》学生成绩管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

《C语言案例实践》学生成绩管理系统.docx

《《C语言案例实践》学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《《C语言案例实践》学生成绩管理系统.docx(29页珍藏版)》请在冰豆网上搜索。

《C语言案例实践》学生成绩管理系统.docx

《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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1