点击获取源码链接
摘要 I
目录 II
1 概述 1
1.1 课程设计目的 1
1.2 预备知识 1
1.3 实训的内容和要求 1
2 需求分析 2
2.1 系统目标 2
2.2 功能分析 2
2.3 开发环境 2
3 总体设计 3
3.1 系统功能模块图 3
3.2 系统总流程图 3
3.3 功能详细分析 4
4 详细设计 5
4.1 选择菜单界面 5
4.2 增加学生信息 6
4.3 删除学生信息 8
4.4 修改学生信息 9
4.5 查找学生信息 11
4.6 浏览学生信息 13
4.7 学生信息按成绩排序 13
5 程序运行 16
5.1 选择菜单界面 16
5.2 增加学生信息 16
5.3 修改学生信息 17
5.4 查找学生信息 17
5.5 浏览全部学生信息 18
5.6 按成绩对学生进行排序 18
5.7 删除学生信息 18
心得体会 19
参考文献 20
1 概述
1.1 课程设计目的
(1)掌握各种数据存储结构与算法思想。
(2)掌握各种常用查找,排序,汇总等算法的实现,以及增删改查等。
(3)掌握各种学生表,课程表的设计,以及学生管理,课程管理等模块操作。
1.2 预备知识
C语言
1.3 实训的内容和要求
本系统完成的主要内容和要求有:
输入学生的基本信息、所在班级信息、所学课程和成绩。
学生信息的输入、修改与查询。
班级信息的输入、修改与查询。
班级课程的输入、修改与查询。
学生成绩的输入、修改与查询。
学生成绩的排序。
2 需求分析
2.1 系统目标
该系统设计的目标主要是为了能够有效的管理学生信息,能够减轻教师负担,通过学生信息管理系统对学生信息统一管理,既能够减少教师的工作量,也能更好的去管理学生的信息。
2.2 功能分析
该系统的主要功能是:能够输入学生的基本信息、所在班级信息、所学课程和成绩,并且,可以对学生信息、班级信息、课程信息、成绩信息进行输入、修改与查询和对学生成绩进行排序。
2.3 开发环境
(1)运行装有Windows 10操作系统的计算机
(2)Visual C++ 6.0旗舰版
3 总体设计
3.1 系统功能模块图
系统功能模块图,如图3.1所示。
3.1 系统功能模块图
3.2系统总流程图
图3.2 总流程图
3.3 功能详细分析
(1)菜单函数:通过菜单建立用户与程序之间的交流
(2)查询学生信息函数
功能:通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在
查询方式:
1)按照学号查询
2)按照姓名查询
(3)修改学生信息
功能:通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作;
(4)增加学生信息函数
功能:添加学生信息,并保存至文件中
(5)删除学生信息函数
功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息;
(6)输出当前学生信息
功能:可以输出进行多种操作后的学生信息管理系统中的所有学生信息;
(7)保存学生信息
功能:将进行某些操作后的学生信息保存到指定文件中
4 详细设计
4.1 选择菜单界面
(1)功能描述
菜单函数:通过菜单建立用户与程序之间的交流。
(2)实现代码
void welocome()//登陆界面
{
system("color b1");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
printf("\n");
printf("\n");
printf("\n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆ 欢迎登录学生信息管理平台 ☆☆☆☆☆☆☆☆☆☆☆☆ \n");
printf("\n");
printf("\n");
printf("\n");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
}
void menu()//功能菜单
{
system("color e3");
printf(" \n\n \n\n");
printf(" ★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
printf(" ★ 学生信息管理系统 ★\n \n");
printf(" ★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
printf(" ★★★★★★★★★★系统功能菜单★★★★★★★★★★★ \n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆ ☆☆☆☆☆☆☆☆☆☆☆ \n");
printf(" ★★★★★★★★★★★★★★★★★★★★★★★★ \n");
printf(" * 1.退出学生系统 *&* 2.增加学生信息 * \n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n");
printf(" * 3.删除学生信息 *&* 4.修改学生信息 * \n");
printf(" ★★★★★★★★★★★★★★★★★★★★★★★ \n");
printf(" * 5.查找学生信息 *&* 6.学生信息排序 * \n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n");
printf(" * 7.输出学生信息 *&* 8.保存学生信息 * \n");
printf(" ★★★★★★★★★★★ ★★★★★★★★★★★ \n");
printf(" ---------------------- ---------------------- \n");
printf("请选择菜单编号:");
return ;
}
4.2 增加学生信息
(1)功能描述
添加学生信息,并保存至文件中。
(2)实现代码
void addstu(LinkList *&L)
{
system("color f2");
printf("请输入学生的信息:\n");
printf("学号:");
scanf("%s",nu);
LinkList *q=L->next;
while(q!=NULL )
{
if(strcmp(q->data.num,nu)==0)
{
printf("该生已存在\n");
break;
}
q=q->next;
}
if(q==NULL)
{
LinkList *p;
InitList(p);
strcpy(p->data.num,nu);
printf("姓名:") ;
scanf("%s",nam) ;
strcpy(p->data.name,nam);
printf("性别:(w为男 m为女)");
scanf(" %c",&s);
p->data.sex=s;
printf("年龄:");
scanf("%d",&ag);
p->data.age=ag;
printf("班级:");
scanf("%s",cg);
strcpy(p->data.grade,cg);
printf("课程:");
scanf("%s",c);
strcpy(p->data.course,c);
printf("总成绩:");
scanf("%d",&sc);
while(sc>100||sc<0){
printf("输入有误,请重新输入\n");
scanf("%d",&sc);
}
p->data.score=sc;
ListInsert(L,p);
}
}
4.3 删除学生信息
(1)功能描述
通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息。
(2)实现代码
void deletestu(LinkList *L)
{
system("color f4");
printf("请输入您要删除的学生的学号:");
scanf("%s",nu);
//判断
LinkList *p,*pre;
if(L->next==NULL)
{
printf("还没有学生信息,请增加学生信息\n");
return;
}
pre=L;
p=pre->next;
int judge=0;
while(p)
{
if(strcmp(p->data.num,nu)==0)
{
judge=1;
pre->next =p->next;
free(p);
printf("删除学生成功\n");
break;
}
pre=p;
p=p->next;
}
if(judge==0)
printf("该生不存在\n");
}
4.4 修改学生信息
(1)功能描述
通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作。
(2)实现代码
void changestu(LinkList *L)
{
int judge=1;
system("color e4");
printf("请输入您要修改学生的学号:\n");
scanf("%s",nu);
LinkList *q=L->next;
while(q!=NULL )
{
if(strcmp(q->data.num,nu)==0)
{
judge=1;
printf("请输入您要修改的信息选项:1.姓名 2. 总成绩 3.年龄 4.班级 5.课程 \n");
int n;
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入您要修改的名字:");
scanf("%s",nam);
printf("修改的名字为:%s\n",nam);
strcpy(q->data.name,nam);
printf("修改名字成功!\n");
break;
case 2:
printf("请输入您要修改的总成绩");
scanf("%d",&sc);
printf("修改的总成绩为:%d\n",sc);
q->data.score=sc;
printf("修改总成绩成功!\n");
break;
case 3:
printf("请输入您要修改的年龄:");
scanf("%d",&ag);
printf("修改的年龄为:%d\n",ag);
q->data.age=ag;
printf("修改年龄成功!\n");
break;
case 4:
printf("请输入您要修改的班级:");
scanf("%s",cg);
printf("修改的班级为:%s\n",cg);
strcpy(q->data.grade,cg);
case 5:
printf("请输入您要修改的课程:");
scanf("%s",c);
printf("修改的课程为:%s\n",c);
strcpy(q->data.course,c);
default :
printf("请输入正确的选项\n");
break;
}
}
q=q->next;
}
if(judge==0)
{
printf("该生不存在\n");
}
}
4.5 查找学生信息
(1)功能描述
通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在。
(2)实现代码
void findstu(LinkList *L)
{
int flag;
system("color b1");
printf("1.按学号查询:\n");
printf("2.按姓名查询:\n");
printf("请输入查询方式:");
scanf("%d",&flag);
if(flag==1){
printf("请输入该生学号:");
scanf("%s",nu);
//判断
LinkList *q=L->next;
while(q!=NULL )
{
if(strcmp(q->data.num,nu)==0)
{
printf("姓名:%s\n",q->data.name);
printf("学号:%s\n",q->data.num);
printf("性别:%c\n",q->data.sex);
printf("年龄:%d\n",q->data.age);
printf("班级:%s\n",q->data.grade);
printf("课程:%s\n",q->data.course);
printf("总成绩:%d\n",q->data.score);
break;
}
q=q->next;
}
if(q==NULL)
printf("该生不存在\n");
}else{
printf("请输入该生姓名:");
scanf("%s",nam);
LinkList *q=L->next;
while(q!=NULL )
{
if(strcmp(q->data.name,nam)==0)
{
printf("姓名:%s\n",q->data.name);
printf("学号:%s\n",q->data.num);
printf("性别:%c\n",q->data.sex);
printf("年龄:%d\n",q->data.age);
printf("班级:%s\n",q->data.grade);
printf("课程:%s\n",q->data.course);
printf("总成绩:%d\n",q->data.score);
break;
}
q=q->next;
}
if(q==NULL)
printf("该生不存在\n");
}
}
4.6 浏览学生信息
(1)功能描述
可以输出进行多种操作后的学生信息管理系统中的所有学生信息。
(2)实现代码
void display(LinkList *&L)
{
LinkList *q=L->next;
if(q==NULL)
{
printf("还没有学生信息,请增加学生信息\n");
return;
}
while(q)
{
system("color c0");
printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 班级:%s 课程:%s 总成绩:%d \n",q->data.num,q->data.name,q->data.age,q->data.sex, q->data.grade,
q->data.course,q->data.score);
q=q->next;
}
}
4.7 学生信息按成绩排序
(1)功能描述
通过学生们的成绩高低,进行排序的操作。
(2)实现代码
void paixu(LinkList *L)
{
system("color f9");
LinkList *q,*p,*r=L->next;
//判断
if(r==NULL)
{
printf("还没有学生信息,请增加学生信息\n");
return;
}
while(r) //两层循环完成排序
{
p=r;
q=r->next;
LinkList *tmp;//用于排序时暂存节点
InitList(tmp);
while(q)
{
if(q->data.score > p->data.score)
{
/*先复制q结点信息到tmp*/
strcpy(tmp->data.num,q->data.num);
strcpy(tmp->data.name,q->data.name);
tmp->data.sex=q->data.sex;
tmp->data.age=q->data.age;
strcpy(tmp->data.grade,q->data.grade);
strcpy(tmp->data.course,q->data.course);
tmp->data.score=q->data.score;
/*再复制p结点信息到q*/
strcpy(q->data.num,p->data.num);
strcpy(q->data.name,p->data.name);
q->data.sex=p->data.sex;
q->data.age=p->data.age;
strcpy(q->data.grade,p->data.grade);
strcpy(q->data.course,p->data.course);
q->data.score=p->data.score;
/*最后复制exchange结点信息到p*/
strcpy(p->data.num,tmp->data.num);
strcpy(p->data.name,tmp->data.name);
p->data.sex=tmp->data.sex;
p->data.age=tmp->data.age;
strcpy(p->data.grade,tmp->data.grade);
strcpy(p->data.course,tmp->data.course);
p->data.score=tmp->data.score;
}
q=q->next;
}
r=r->next;
}
printf("排序后的学生信息是:\n");
display(L);
}
5 程序运行
5.1 选择菜单界面
(1)功能描述
菜单函数:通过菜单建立用户与程序之间的交流。
(2)实现截图
图5.1 选择菜单界面
5.2 增加学生信息
(1)功能描述
添加学生信息,并保存至文件中。
(2)实现截图
图5.2 增加学生信息
5.3 修改学生信息
(1)功能描述
通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作。
(2)实现截图
图5.3 修改学生信息
5.4 查找学生信息
(1)功能描述
通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在。
(2)实现截图
图5.4 查找学生信息
5.5 浏览全部学生信息
(1)功能描述
可以输出进行多种操作后的学生信息管理系统中的所有学生信息。
(2)实现截图
图5.5 浏览全部学生信息
5.6 按成绩对学生进行排序
(1)功能描述
通过学生们的成绩高低,进行排序的操作。
(2)实现截图
图5.6 按成绩排序学生信息
5.7 删除学生信息
(1)功能描述
通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息。
(2)实现截图
图5.7 删除学生信息
心得体会
该程序是学生信息管理系统。编写代码的过程中,利用了学习过的链表等知识,将学生信息管理系统通过链表进行了重写。复习了链表的知识和C语言的文件操作。编写一个功能齐全的、方便用户操作的学生管理系统,需要长期的实践与积累。实践时检验的好办法,学到的知识经过实践的检验,才能更好的被自身吸收。文件的操作的程序编写应用对我来说,是一个没有经过多次实践的问题,所以我在写这部分程序时,还是有些难度。
参考文献
[1] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005
[2] 唐宁九.数据结构与算法实验和课程设计教程.北京:清华大学出版社,2008
[3] 刘光然.数据结构实践训练教程.天津:南开大学出版社,2009
[4] 苏仕华.数据结构课程设计.北京:机械工业出版社,2005
[5] 苏小红.C语言程序设计.北京:高等教育出版社,2011
[6] 严蔚敏.数据结构C语言版[M].清华大学出版社,2007
课程设计成绩评定表
评定项目 内 容 满分 评分 总分
学习态度 学习认真,态度端正,遵守纪律。 10
设计情况 认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。 40
说明书质量 设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。 40
回答问题情况 回答问题准确,基本概念清楚,有理有据,有一定深度。 10
总成绩 采用五级分制:优、良、中、及格、不及格
指导教师评语:
签名:
年 月 日