学生成绩管理系统数据结构课程设计.docx
- 文档编号:1386302
- 上传时间:2022-10-21
- 格式:DOCX
- 页数:25
- 大小:379.86KB
学生成绩管理系统数据结构课程设计.docx
《学生成绩管理系统数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据结构课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统数据结构课程设计
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
学生成绩管理系统
已知技术参数和设计要求:
现有学生成绩信息文件1(cj1.txt),内容如下
姓名学号语文数学英语
张明明01677882
李成友02789188
张辉灿03688256
王露04564577
陈东明05673847
….......…
学生成绩信息文件2(cj2.txt),内容如下:
姓名学号语文数学英语
陈果31576882
李华明32889068
张明东33484256
李明国34504587
陈道亮35475877
….......…
试编写一管理系统,其基本功能要求:
实现对两个文件数据进行合并,生成新文件cj3.txt
抽取出三科成绩中有补考的学生并保存在一个新文件cj4.txt
对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)
输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)
要求使用结构体,链或数组等实现上述要求.
采用多种方法且算法正确者,可适当加分.
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
数据结构课程设计说明书
一、需求分析
1、问题描述
现如今,学校人数的暴涨,对学生基本信息的录入,保存量越来越大,为了简化对工作人员的操作,故设计一个程序来完成对学生基本信息的录入,保存,编辑等简单操作。
2、基本任务
(1)对学生信息表cj1和cj2进行合并;
(2)把合并的信息生成cj3;
(3)把cj3中有补考的学生信息生成cj4;
(4)对合并后的文件3.txt中的数据按总分降序排序;
(5)输入一个学生姓名后,能查找到此学生的信息并输出结果。
二、概要设计
为了完成需求分析的基本任务,主要从以下3个方面进行设计:
1、主界面设计
为了实现学生成绩管理系统的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。
系统主控菜单运行界面如图1所示:
图1学生成绩管理系统主菜单
2、数据结构设计
系统采用链表的顺序存储结构。
一个字符数组存储学生姓名。
四个整型数存储学生学号﹑语文成绩﹑数学成绩﹑英语成绩。
和一个结构体数组。
3、系统功能设计
(1)从c盘下读取cj1.txt和cj2.txt中的学生成绩信息。
程序会给出提示,因为如果在c盘下不存在这两个文件那么程序将不能继续会自动退出。
(2)程序给出选择是否将从c盘读取的学生信息保存到c盘下cj3.txt中,如果您选择是,那么程序将执行。
如果在c盘存在一个名为cj3.txt的文件,那么程序将用读取的信息将其覆盖。
如果不存在,则系统会自动生成一个名为cj3.txt的文件将数据放入其中。
(3)程序会给出选择是否将cj3.txt中有补考的学生信息生成一个cj4.txt的文件。
如果您选择是。
那么程序将会执行。
对于在c盘是否有名为cj4.txt的文件的处理和上面一样。
(4)程序会给出按总分大小排序的选项。
程序设计了两种排序方法—直接插入法排序和冒泡排序。
(5)最后程序设计了一个循环,实现根据学生姓名查找学生成绩信息。
如果你所输入的学生姓名不存在,程序将会输出“查无此人”的提示符并提示是否继续查找。
你可根据需要选择。
如果选择否,程序退出。
三、模块设计
【主程序模块】:
voidmain()
{
fp=fopen("c:
\\cj1.txt","rt");//从文本文件cj1.txt中读取数据传向cj3.txt
fp=fopen("c:
\\cj2.txt","rt");//从文本文件cj2.txt中读取数据接到cj3.txt的后面
fp=fopen("c:
\\cj3.txt","rt");//从合成后的cj3.txt读取数据,生成链表
fp=fopen("c:
\\cj4.txt","wt");//把三科成绩中有补考的学生信息放入cj4.txt
for(i=1;i<10;i++)
{
}//直接插入法排序
for(i=0;i<9;i++)
{
}//冒泡法排序
do{
}
while(i==1);
}
【功能模块调用关系图】
【模板详细设计】
typedefstructLNode
{
charname[6];
intno;
intyw;
intsx;
intyy;
structLNode*next;
}LinkList;
structNameNo
{
intno;
intyw;
intsx;
inttotal;
charname[6];
}st[10];
四、详细设计
(1)在c盘根目录下打开cj1.txt,用一个FILE型指针*fp指向cj1.txt,fp=fopen("c:
\\cj1.txt","rt")。
再用一个FILE型指针*fp1打开cj3.txt。
使用fp1=fopen("c:
\\cj3.txt","wt")对cj3.txt只写。
然后循环使用ch=fgetc(fp)和fputc(ch,fp1)把cj1.txt的信息复制到cj3.txt中。
主要代码实现:
if((fp=fopen("c:
\\cj1.txt","rt"))==NULL)//从文本文件cj1.txt中读取数据传向cj3.txt
{
printf("无cj1.txt文本文件,程序结束。
\n");//无cj1.txt程序将无法进行。
return;//程序退出
}
fp1=fopen("c:
\\cj3.txt","wt");//打开cj3.txt只写
ch=fgetc(fp);//从cj1.txt中读取一个字符存入ch中
while(ch!
=EOF)//循环
{
fputc(ch,fp1);//把ch中的字符写入cj3.txt
ch=fgetc(fp);
}
fclose(fp1);
fclose(fp);
(2)再打开cj2.txt,用FILE型指针指向cj2.txt只读。
fp=fopen("c:
\\cj2.txt","rt")。
用*fp1打开cj3.txt追加。
因为cj2.txt中第一行是提示,在cj1.txt中已经存在,所以它是多余的,循环fgetc(fp)三十六次把指针移动到下一行。
ch=fgetc(fp)和fputc(ch,fp1)把cj2.txt的信息追加到cj3.txt中尾部。
(3)将合成后的cj3.txt中的数据存放到链表,由于cj3.txt中的数据比较乱,既有姓名学号还有三科成绩,所以这是一个要非常仔细的过程。
每一行构成一个链表节点,也就组成一个循环,前六个字符存放到链表数据域中的字符数组中,然后有五个空格用五次fgetc(fp)将指针后移五次,在读取一个字符减去48得到这个字符对应打整数,再读取一个字符减去48,把这两个前面一个作为十位后一个作为各位存放到链表的数据域,后面的三科成绩用同样的方法处理存入链表的数据域作为语文﹑数学和英语的成绩。
主要代码:
p=(LinkList*)malloc(sizeof(LinkList));
p->next=NULL;
fp=fopen("c:
\\cj3.txt","rt");//从合成后的cj3.txt读取数据,生成链表
for(i=0;i<36;i++)
fgetc(fp);
ch=fgetc(fp);
while(ch!
=EOF)
{
s=(LinkList*)malloc(sizeof(LinkList));
fgets(s->name,7,fp);
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->no=x;
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->yw=x;
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->sx=x;
for(i=0;i<5;i++)
fgetc(fp);
x=fgetc(fp)-48;
x=x*10+fgetc(fp)-48;
s->yy=x;
s->next=p->next;
p->next=s;
ch=fgetc(fp);
}
fclose(fp);
(4)把有补考的同学存入cj4.txt中。
在链表中扫面,如果有一科成绩不及格怎存放到cj4.txt。
实现方法和前面相似。
主要代码:
fp=fopen("c:
\\cj4.txt","wt");//把三科成绩中有补考的学生信息放入cj4.txt
fputs("姓名学号语文数学英语",fp);
fclose(fp);
fp=fopen("c:
\\cj4.txt","a");
s=p->next;
while(s!
=NULL)
{
if(s->yw<60||s->sx<60||s->yy<60)
{
ch='\n';
fputc(ch,fp);
fputs(s->name,fp);
for(i=0;i<5;i++)
{
ch='';
fputc(ch,fp);
}
ch=s->no/10+48;
fputc(ch,fp);
ch=s->no-(s->no/10)*10+48;
fputc(ch,fp);
for(i=0;i<5;i++)
{
ch='';
fputc(ch,fp);
}
ch=s->yw/10+48;
fputc(ch,fp);
ch=s->yw-(s->yw/10)*10+48;
fputc(ch,fp);
for(i=0;i<5;i++)
{
ch='';
fputc(ch,fp);
}
ch=s->sx/10+48;
fputc(ch,fp);
ch=s->sx-(s->sx/10)*10+48;
fputc(ch,fp);
for(i=0;i<5;i++)
{
ch='';
fputc(ch,fp);
}
ch=s->yy/10+48;
fputc(ch,fp);
ch=s->yy-(s->yy/10)*10+48;
fputc(ch,fp);
s=s->next;
}
else
s=s->next;
}
fclose(fp);
(5)用一个结构体数组存放学生信息,然后用直接插入法和冒泡法进行总分降序排列,先用直接插入法排好序后打乱,再用冒泡法排序,这两个过程比较简单,就不多作介绍。
(6)最后是查找,分别在数组和链表中查找,这个过程也比较简单,但要注意的是在输入要查找的人的姓名时如果人名为两个字则要在中间加两个空格。
这样才能成功查找到。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 数据结构 课程设计