学生成绩管理系统.docx
- 文档编号:3882365
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:30
- 大小:168.35KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
成绩评定
教师签名
嘉应学院计算机学院
《数据结构》实验报告
课程名称:
数据结构
开课学期:
2016-2017学年第1学期
班级:
1401
指导老师:
钟治初
实验题目:
学生成绩管理系统
学号:
141110043
姓名:
苏永达
提交时间:
2016年10月27日
一、实验要求:
(1)设计一个学生成绩管理系统,模拟高考成绩的管理。
功能至少包括数据输入,输出,查找,插入,删除,修改,排序,统计各成绩段的人数,考生成绩的排位,报考志愿的检索等。
(2)所有输入输出数据均使用文本文件进行读写。
(3)所有过渡性数据使用二进制文件进行读写和保存。
(4)设计使用平行志愿进行出档。
(5)设计使用非平行志愿行进出档。
(6)设计志愿时,可以设计12个志愿,如果平行志愿,则前后各6个分别为第一组和第二组平行志愿处理。
(7)设计考生记录的字段时,可以预留补录志愿的字段。
或者将未录取考生的数据进行备份,然后将志愿清空后再增加补录志愿。
二、功能:
(1)按学号顺序输入学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),并存入文件中。
(2)从文件读取数据
(3)删除学生信息
(4)查询学生信息(查询可分为精确查询和模糊查询)
(5)修改学生信息(要求修改后,数据依然是按学号顺序排列)
(6)插入学生信息(要求插入后,数据依然是按学号顺序排列)
(7)附加功能,学生可自由发挥,如:
排名、求各门课程平均分等。
三、实验目的
1、掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体。
2、能够采用模块化思想调试程序。
3、通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。
四、系统分析
4.1相关基础知识
选择、循环、函数、指针、结构体、链表
4.2总体方案
架构图:
方案描述:
菜单:
运用switchcase选择功能,在每个case中有相对应的调用语句,调用相对应的函数。
删除功能:
调用删除函数,判断是否保存,如果保存写入文件。
插入功能:
运用链表插入。
修改功能:
调用删除函数跟插入函数,先删除再插入,从而实现修改功能。
查询功能:
调用菜单中的查询函数,用循环实现查询功能。
排名功能:
调用菜单中的排名函数,通过冒泡排序法实现功能。
保存功能:
运用写入文件。
五、系统设计
定义一个student类型的结构体,里面包含学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。
5.1新建功能
从键盘输入N个学生基本信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),编程根据输入信息计算各学生总分和平均分。
创建动态链表,将学生信息存入链表中。
在DOS屏幕上打印链表内所有学生信息。
新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。
5.2打开功能
打开一个文件,从文件中读取学生信息,并新建链表,将数据存入动态链表。
在DOS屏幕上打印链表内所有学生信息。
5.3修改功能
在DOS屏幕上打印出当前的所有学生信息。
输入待修改的学生学号,若不存在,输出“查无此人”;若存在,则输入修改的信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。
最后在DOS屏幕上打印出新的所有学生信息。
5.4插入功能
在DOS屏幕上打印出当前的所有学生信息。
输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),根据输入信息计算各学生总分和平均分。
若输入的学生学号已经存在,则输出“该学号已存在,无法操作!
”,否则将学生信息插入到链表中,插入后链表中的数据依然按照学号排列。
最后在DOS屏幕上打印出新的所有学生信息。
5.5查询功能
查询分为:
精确查询、模糊查询
精确查询:
(1)按姓名查询
输入待查询的姓名;
根据顺序查询的方法,对学生的姓名依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕上显示出来。
若需要查询的信息不存在,系统则会提示找不到此人。
可重复查询。
(2)按学号查询
输入待查询的学号;
根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕显示出来。
若需要查询的信息不存在,系统则会提示找不到此人。
可重复查询。
模糊查询:
(1)按姓氏查询
输入待查询的姓氏;
根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。
若需要查询的信息不存在,系统则会提示找不到相关信息。
可重复查询。
(2)按性别查询
输入待查询的性别;
根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。
可重复查询。
5.6删除功能
在DOS屏幕上打印出当前的所有学生信息。
(1)按姓名删除
输入需要删除的学生姓名;
根据顺序查询的方法,对学生的姓名依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。
若需要删除的信息不存在,系统则会提示删除失败。
(2)按学号删除
输入需要删除的学生学号;
根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。
若需要删除的信息不存在,系统则会提示删除失败。
5.7排名功能
可根据学生的总分进行排名,并在DOS屏幕上输出排名结果。
5.8关于我们
在DOS屏幕上输出系统相关信息。
5.9软件说明
5.10退出保存
选择‘0’退出系统,保存功能在每段函数结束后实现。
5.10运行结果
5.10.0主界面
5.10.1新建文件(输入一组数据,存入文件中)
5.10.2打开文件(打开文件,读取文件数据存入链表)
5.10.3修改功能
5.10.4插入功能
5.10.5查询功能
精确查询-按姓名查询
精确查询-按学号查询
模糊查询-按姓氏查询
模糊查询-按性别查询
5.10.6删除功能
按姓名删除
按学号删除
5.10.7总分排名功能
5.10.9软件说明
5.10.10退出保存
保存功能在每段函数结束后实现。
六、心得体会
通过这次实验我们更好的掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体、链表等功能。
通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,虽然在设计过程中遇到了不少问题麻烦,在教材数据的帮助下,完成了这次程序设计。
七、源代码
#include
#include
#include
/*---------------------------------------------------------*/
#defineLENsizeof(structstudent)//结构体长度
/*---------------------------------------------------------*/
#defineNEW(structstudent*)malloc(LEN)
/*---------------------------------------------------------*/
FILE*fp;/*文件指针*/
/*---------------------------------------------------------*/
structstudent
{
intnum;
charname[20];
intscore1,score2,score3,score4,score5;
charsex;
doubleaver;
floatsum;
structstudent*next;
};
charfilename[100];
structstudent*creat()
{structstudent*h;
structstudent*p,*q;
printf("需要输入几条信息:
");
inti,n;
scanf("%d",&n);
printf("\n----------请按学号顺序依次输入学生信息----------\n");
charc=getchar();
h=NULL;
for(i=1;i<=n;i++)
{p=NEW;
if(p==NULL)
{printf("Allocationfailure\n");
exit(0);
}
printf("\n");
printf("输入姓名<如:
zhangsan>:
");
gets(p->name);
printf("输入学号<如:
1>:
");
scanf("%d",&p->num);
c=getchar();
printf("输入性别
");
scanf("%c",&p->sex);
printf("输入c语言成绩:
");
scanf("%d",&p->score1);
printf("输入高数成绩:
");
scanf("%d",&p->score2);
printf("输入大学语文成绩:
");
scanf("%d",&p->score3);
printf("输入汇编语言成绩:
");
scanf("%d",&p->score4);
printf("输入中近史成绩:
");
scanf("%d",&p->score5);
c=getchar();
p->sum=p->score1+p->score2+p->score3+p->score4+p->score5;
p->aver=(p->score1+p->score2+p->score3+p->score4+p->score5)/5.0;
p->next=NULL;
if(h==NULL)/*h为空,表示新结点为第一个结点*/
h=p;/*头指针指向第一个结点*/
else/*h不为空*/
q->next=p;/*新结点与尾结点相连接*/
q=p;/*使q指向新的尾结点*/
}
returnh;
}
structstudent*paixu(structstudent*head)/*总分排名*/
{system("cls");
printf("总分排名如下:
\n");
structstudent*op;
structstudent*p;
structstudent*p1,*p2;
p1=(structstudent*)malloc(LEN);
p1->next=head;
head=p1;
for(op=NULL;op!
=head;op=p)
{
for(p=p1=head;p1->next->next!
=op;p1=p1->next)
{
if(p1->next->sum
{
p2=p1->next->next;
p1->next->next=p2->next;
p2->next=p1->next;
p1->next=p2;
p=p1->next->next;
}
}
}
p1=head;
head=head->next;
free(p1);
p1=NULL;
returnhead;
}
voidprlist(structstudent*head)/*输出函数*/
{structstudent*p;
p=head;
printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n");
while(p!
=NULL)
{printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);
p=p->next;
}
system("pause");
}
/*-------------------------------------write将数据存入文件-------------------------------------------*/
voidwrite(structstudent*head)
{
structstudent*p;
p=head;
if(head!
=NULL)
{
while(p!
=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
}
printf("文件更新成功!
\n");
fclose(fp);
system("pause");
system("cls");
}
/*-------------------------------------read将文件数据读入一个新链表中-------------------------------------------*/
structstudent*read(void)
{
structstudent*head;
structstudent*p1,*p2;
head=NULL;
p1=NEW;
rewind(fp);//指向文件头
fread(p1,LEN,1,fp);
while(!
feof(fp))
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1=NEW;
fread(p1,LEN,1,fp);
}
p2->next=NULL;
fclose(fp);
return(head);
}
voidfind(structstudent*head)/*查询功能*/
{intt,s,i,j;
structstudent*p,*q;
charx[10],y[2]={"0"},c[2];
chark,f;
p=head;
printf("精确查找:
\n*1按姓名查找\n*2按学号查找\n模糊查找\n*3按姓氏查找:
\n*4按性别查找\n");
scanf("%d",&s);
k=getchar();
if(s==1)
{printf("请输入姓名:
");
gets(x);
while(p!
=NULL)
{
if(strcmp(x,p->name)==0)
{printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n");
printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);
j=1;}
elsei=1;
q=p;p=p->next;
}
}
elseif(s==2)
{printf("按学号查找:
\n");
scanf("%d",&t);
while(p!
=NULL)
{
if(t==p->num)
{printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n");
printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);
j=1;}
elsei=1;
q=p;p=p->next;
}
}
elseif(s==3)
{printf("按姓氏查询:
\n");
gets(c);
while(p!
=NULL)
{
if(strncmp(c,p->name,1)==0)
{printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n");
printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);
j=1;}
elsei=1;
q=p;p=p->next;
}
}
elseif(s==4)
{printf("按性别查询:
\n");
f=getchar();
while(p!
=NULL)
{if(f==p->sex)
{printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n");
printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);
j=1;}
elsei=1;
q=p;p=p->next;
}
}
if(i=1&&j!
=1)
printf("Notfound.输入错误\n");
system("pause");
system("cls");
}
structstudent*delstudent(structstudent*head)/*删除功能*/
{ints,n,m=1;
charc;
structstudent*p,*q;
charx[10];
while(m)
{printf("*1按学号删除\n*2按姓名删除\n");
scanf("%d",&s);
c=getchar();
printf("已有信息如下:
\n");
prlist(head);
if(head==NULL)
{printf("Thisisaemptylist.");
returnhead;
}
p=head;
switch(s)
{case2:
{printf("请输入姓名:
");
gets(x);
while(strcmp(x,p->name)!
=0&&p->next!
=NULL)
{q=p;p=p->next;}
if(strcmp(x,p->name)==0)
{if(p==head)
head=p->next;
else
q->next=p->next;
free(p);
}
else
{printf("Notfound.\n");continue;}
};m=0;break;
case1:
{printf("请输入学号:
");
scanf("%d",&n);
c=getchar();
while(n!
=p->num&&p->next!
=NULL)
{q=p;p=p->next;}
if(n==p->num)
{if(p==head)
head=p->next;
else
q->next=p->next;
free(p);
}
else
{printf("Notfound.\n");continue;}
};m=0;break;
default:
printf("输入错误\n");break;
}
}
returnhead;
}
voidabout()/*关于我们*/
{system("cls");
printf("∩_∞,∩_∩\n\n");
printf("(●.●)(●﹏●)\n\n");
printf("/▓\/█\Hi\n\n");
printf("成员介绍\n\n");
printf("1.组长:
\n\n");
printf("2.组员:
\n\n");
printf("3.组员:
\n\n");
printf("4.组员:
\n\n");
printf("产品信息\n\n");
printf("一.产品用途:
主要用于学生成绩管理与查询.\n\n");
printf("二.班级成绩管理系统主要包括:
数据的录入\n\n");
printf("读取显示删除插入查找修改排名.\n\n");
system("pause");
system("cls");
}
voidend()/*退出系统*/
{
chars;
printf("是否退出系统Y/N?
\n");
scanf("%c",&s);
if(s=='Y'||s=='y')
exit(0);
elseif(s=='N'||s=='n')
return;
else
{
printf("输入错误,请重新输入\n\n");system("pause");return;
}
}
structstudent*insert(structstudent*head,structstudent*op)/*插入功能*/
{structstudent*p,*q;
if(head==NULL)
{head=op;/*空表时,插入结点*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统