资源描述
课 程 设 计 报 告
]
课程名称 数据结构
课题名称 学生成绩管理系统
专 业 通信工程
班 级 1301
学 号 2
姓 名 momom
指导教师 张鏖烽 彭帧 黄哲
2015年 7月 2日
湖南工程学院
课 程 设 计 任 务 书
课程名称 数据结构
课 题 学生成绩管理系统
专业班级 通信工程1301
学生姓名 momom
学 号 2
指导老师 张鏖烽 彭帧 黄哲
审 批 张鏖烽
任务书下达日期 2015年 6月 29日
任 务 完成日期 2015年 7月 5日
目 录
一、课程设计得分析 4
1、课程设计目得: 4
2、课程设计题目 4
3、需求分析 5
二、概要设计 5
三、详细设计 6
四、调试分析 11
(1)调试过程中遇到得问题ﻩ11
(2)经验与体会ﻩ11
五、用户使用说明 12
六、测试结果 13
七、附录ﻩ18
八、课程设计评分表ﻩ37
一、课程设计得分析
1、课程设计目得:
课程设计就是对学生得一种全面综合训练,就是与课堂听讲、自学与练习相辅相成得必不可少得一个教学环节。通常,实习题中得问题比平时得习题复杂得多,也更接近实际。实习着眼于原理与应用得结合点,使读者学会如何把书上学到得知识用于解决实际问题,培养软件工作所需要得动手能力;另一方面,能使书上得知识变“活”,起到深化理解与灵活掌握教学内容得目得.平时得练习较偏重于如何编写功能单一得“小”算法,而实习题就是软件设计得综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能与技巧,多人合作,以至一整套软件工作规范得训练与科学作风得培养。
2、课程设计题目
【课题】
学生成绩管理系统
【问题描述】
根据自己这个学期得课程表,设计一个成绩管理系统管理自己班得成绩;每个学生记录包含学号、姓名、每门课程成绩、总分以及加权平均分.
【基本要求】
一个完整得成绩管理系统应具有以下功能:
(1)输入:成绩录入;
(2)输出:输出成绩表;
(3)插入:在成绩表中适当位置插入某个学生成绩;
(4)删除:在成绩表中删除某个学生成绩;
(5)查找:根据某个关键字查找某个学生成绩;
(6)排序:根据某一个或某几个关键字进行排序;
(7)筛选:根据某个关键字筛选出符合某些条件得数据;
【测试数据】
用本班得成绩总表作为测试数据.
3、需求分析
本次课程设计得题目就是学生成绩管理系统,要求可以存入学生,学生信息包括学生学号、姓名、每科成绩与平均成绩以及加权平均成绩等。该系统主要有以下七个功能,即对学生信息进行:输入、输出、插入、删除、查找、排序、筛选等功能。
对学生进行操作可以有很多思路,而我选用得就是单链表村学生信息那一条思路,即设置一个单链表,其中节点数据域保存学生基本信息。由于我们学号比较长,用整型数据无法保存,所以我定义char型得字符串来保存学号与姓名.用一个数组来保存学生每一科得成绩,此外在定义一个总分与平均分变量。定义学生如下:typedef struct Student
{
ﻩchar mun[12]; //学号
char name[20]; //姓名
float score[8]; //成绩
float all_score; //总分
ﻩfloat ave_score; //加权平均分
ﻩstruct Student *next;
}LinkList;
二、概要设计
本程序采用链表得方法将每一个学生设置成为一个链表中得数据节点,节点中有字符型mun[12](学号)、name[20](姓名)、浮点型数据score[8](放置每一科成绩得数组)、all_score(总分)与ave_score(加权平均分)。
主函数中在执行成绩管理系统之前会先创建一个链表,并调用void InitList (LinkList *&L)函数来初始化链表;而后进入菜单选择项选择功能进行操作,主程序流程图如下:
三、详细设计
1、添加学生: 2、输出学生:
创建节点s LinkList *p=L->next;
输入学生信息,计算总分与加权分 for(m=1;m<=总人数&&p!=NULL;m++)
r—>next=s;r=s;(尾插法插入链表) ﻩ输出学生信息,p=p—〉nextﻩ count=count+1;学生总数加1
3、插入学生 ﻩ ﻩ 4、删除学生
输入要插入得位置 数字选择删除方式
scanf("%d”,&w); 按编号删除与学号删除
调用插入函数 1编号 调用Delete_Student
Insert_Student(h,w); 2学号 调用Locate_Student找到
学生位置,在用Delete_Student
得流程图如下:
Insert_Student 函数 Delete_Student得函数流程图:
Locate_Student函数得流程图与如下:Locate_Student1得流程图类似,不再重复了
5查找学生:调用Seek_Student函数,分为按学号查找与按姓名查找
1按编号 调用Locate_Student函数返回i在调用Out_one_Student输出第i个学生
2 按姓名调用Locate_Student1函数返回i在调用Out_one_Student输出第i个学生
6排序函数 调用Queue_Student函数:其中有按学号,总分,各科成绩排序
我这里采用得就是冒泡排序法进行排序,分别定义了两个节点指针q指向头指针p指向q得下一个节点,在进入双重循环进行比较排序 流程图如下:
排序得方法都类似,知识比较数据不同,所以就没有一一画出来了
7 筛选
创建另一个链表r用于存筛选出来得学生,并调用output_Student函数输出
筛选程序流程图如下:
筛选程序又分为1 按总分选 2 全部及格得人 3 按各科成绩
1 而总分筛选主要就是输入一个数值,判断数据就是否大于输入数据,大于得都输出
2 去不几个得人通过比较每一科成绩就是否都大于60分,大于得就选出插入新链表并输出
3 各科成绩得话就是只比较其中一科来创建链表并输出
其比较流程图都如上图所示,这里便不再一一画出来了.
四、调试分析
(1)调试过程中遇到得问题就是如何解决得以及对设计与实现得回顾讨论与分析
在调试过程中遇到得第一个问题就是输出学生得问题,因为输出得问题,其中总就是发现输出乱码,找了好久,后来终于发现就是输入时出了问题,因为姓名我定义了字符串型,而字符串长度我定义了20,在创建节点得时候我却把name[20]给了学生节点,导致输出时地址错误而输出乱码。
第二个问题就是查找,我开始一直想不到怎么把查找到得学生输出,后来想了很久,找到了方法,我先通过查找关键字去找到该学生就是在链表得那个位置,在通过返回得位置得值来输出想要输出得那个学生,所以就定义了Locate_Student与Out_one_Student来完成查找功能.
第三个问题就是筛选功能得实现,我本来想通过比较,将符合关键字得学生筛选出来在输出,结果发现输出函数就是已经定义成一次性全部输出得形式。导致我一直想不到好得方法来进行这个功能得代码编写.后来经过老师得指导,我知道了一种新得方法来编写,就就是通过创建一个新得学生链表来存已经筛选出来得学生。然后在通过输出函数来将新链表进行输出,这样就可以达到筛选得目得。
改进方法:现在想了一下,其实可以将输出函数进行改进,改成一个一个学生输出得形式,在通过一个判断语句进行选择性输出,用这个输出得方法可以减少代码得得量,而达到同样得效果.
第四个问题就是主函数得问题,因为我想让主函数瞧起来简洁一点,就把主函数分成两部分,一部分用于选择操作,另一部分用于进行选择好得操作,可就是这样一来却出现了问题,就就是输出数据之后无法暂停在输出界面,而就是闪了一下就退出来进入主界面了,这个问题我开始以为就是输出函数得问题,结果我去改了输出函数,结果还就是无法停留。后来知道原因了,主函数退出switch循环之后会立即回到主菜单界面,到时无法停在输出界面。我在主函数最后加一个system(“pause")之后才打到可以观察到得地方.
改进方法:可以将主函数定义成一个,不用分开,去掉for(;;)这个循环会好点。
(2)经验与体会
本次课程设计得题目我一开始瞧到得时候以为很容易就能做出来,所以只就是大概想了一下思路,就直接开始了,其实这个实验可以用顺序表做会思路更清晰一些,我没有选择顺序表来做,因为我在单链表这一部分有点模糊,所以想挑战一下用单链表来做。这个程序得每一个代码都就是我经过一步一步分析写出来得,在编写得过程中遇到了很多得阻碍,很多自己无法预知得错误,在不断得找错过程中,我感觉到自己在c语言这一方面得不足,对算法得精髓还不就是很了解, 对于单链表得操作也不就是很熟练,尤其就是在节点指针多起来得时候会有点乱,甚至搞不清指针到底指向哪里了。
然而,在编程过程中,一次次得测试失败,再一次次修改正确却让我慢慢得熟悉了数据结构一些用法,渐渐得知道要编写一个系统,需要各种功能协调才能算一个系统,而每一个功能有需要很多函数之间得相互联系来调用与支撑。同时要想将课程设计完成得好,就需要积极提问,遇到不懂得地方可以找老师或同学相互交流经验,这样才会更加有效率得完成课设。
经过这一段时间得课设,我学到得不仅仅就是数据结构得想关知识,也懂得了团队协作得重要性,知道学习需要真正扎实去学习,这样才能真正学到知识,并灵活运用这些所学知识。
五、用户使用说明
1、添加学生功能:进入系统后先选择1回车即可进入输入界面,然后按照提示输入学生学号、姓名与数据结构、数字信号处理、数字电子技术基础得分数在按回车,如果还想再继续添加就按1继续,否则可以按任何键退出.
2、输出学生:用户在输入完学生数据后既可以按2输出所输入得全部学生
3、插入学生:用户需在主界面按3即可以进入插入界面,此时可以按数字键在选择要插入得位置,如输入1即可以将要插入得学生插入到第一个位置,可以在主界面输入2进行查瞧就是否插入到指定位置。
4、删除学生:用户可以在主界面输入4进入删除,在通过选择编号来删除要删除得学生。
5、查找:查找查找功能有按学号与姓名查找,如按一进入学号查找,可以输入要查找得学号,回车即可以输出要查找得学生。
6、排序:排序可以通过学号,总分,与各科成绩,输入1可以按学号从小到大排序,输入2可以按总分从小到大进行排序,输入3可以进入科目选择,再按1进行数据结构排序,2进行数字型号处理排序,3进行数电得排序.
7、筛选:可以按1进入总分筛选,进入之后输入筛选多少分以上得人,输入分数,如:200,即可输出所有大于200分得学生;在筛选界面输入2可以输出全部及格得学生;按3可以进入各科成绩得筛选,再按1选出所有数据结构及格得学生、再按2选出所有数字信号处理及格得学生、再按3选出所有数字电子技术基础及格得学生.
8、退出:退出程序只需要在主界面按0再回车即可以退出程序.
六、测试结果
1、添加学生:
2、输出学生:
3、 插入学生:
4、删除学生:
ﻬ
5、查找学生:
6、排序
7、筛选
0、退出程序:
七、附录
#include 〈stdio、h>
#include <malloc、h>
#include <string、h>
#include 〈stdlib、h〉
int count =0; //记录学生人数
typedef struct Student
{
ﻩchar mun[12]; //学号
ﻩchar name[20]; //姓名
ﻩfloat score[8]; //成绩
ﻩfloat all_score; //总分
ﻩfloat ave_score; //加权平均分
ﻩstruct Student *next;
}LinkList;
void InitList (LinkList *&L) //初始化链表
{
L=(LinkList *)malloc(sizeof(LinkList));
L-〉next=NULL;
}
void Creat_Student (LinkList *&L) //输入学生并添加到链表里面
{
ﻩLinkList *r=L,*s;
ﻩint i=0,j=1;
ﻩfloat all=0,ave,a[8];
while(j==1)
{
ﻩwhile(r—>next!=NULL)
ﻩ r=r-〉next;
ﻩ s=(LinkList *)malloc(sizeof(LinkList));
ﻩ s-〉next=NULL;
printf(”输入学生学号、姓名、每科成绩\n”);
printf(”学号:");
ﻩ scanf("%s”,&s->mun);
ﻩprintf("姓名:”);
ﻩ scanf(”%s",&s->name);/*数据结构3、0、数字信号处理4、0、数字电子技术基础2、5 这里只输入三门成绩作为示范*/
ﻩﻩfor(i=0;i<3;i++)
{
ﻩﻩ if(i==0)
ﻩ {
ﻩﻩ printf("输入数据结构分数\n");
ﻩ ﻩﻩscanf(”%f",&a[i]);
ﻩ s->score[i]=a[i];
ﻩ }
ﻩ if(i==1)
{
ﻩ printf("输入数字信号处理分数\n");
ﻩ ﻩﻩscanf(”%f",&a[i]);
ﻩ ﻩﻩs->score[i]=a[i];
ﻩﻩﻩ}
ﻩﻩﻩif(i==2)
ﻩﻩ{
ﻩﻩ printf("输入数字电子技术基础分数\n");
ﻩ scanf("%f",&a[i]);
ﻩﻩﻩ s—>score[i]=a[i];
ﻩ} ﻩﻩ
ﻩ}
all=a[0]+a[1]+a[2];
s->all_score=all;
ﻩ ave=(a[0]*3、0+a[1]*4、0+a[2]*2、5)/9、5;
ﻩs—〉ave_score=ave;
ﻩﻩr->next=s;
r=s;
ﻩ count=count+1;
ﻩﻩprintf(”就是否继续?(按1继续,其她退出.)”);
scanf("%d",&j);
ﻩ}
}
void output_Student (LinkList *&L,int n) //输出全部学生
{
LinkList *p=L-〉next;
ﻩif(p==NULL)
{
ﻩprintf("没有学生成绩!请添加学生.。.\n");
ﻩ return;
}
ﻩprintf("\t\t 学生成绩表 \n”);
ﻩprintf(”编号 学号 姓名 数据结构 数字信号 数字电路 总分 加权平均分\n”);
ﻩint m;
for(m=1;m<=n&&p!=NULL;m++)
ﻩ{
ﻩprintf("%-5d%-9s%-9s%-10、1f%-10、1f%-10、1f%-8、1f %-10、1f\n”,m,p—〉mun,p—〉name,p->score[0],p—>score[1],p-〉score[2],p->all_score,p—>ave_score);
ﻩﻩp=p->next;
ﻩ}
}
void Delete_Student(LinkList *&L,int i) //删除第i个学生
{
int j=0;
LinkList *p=L,*q;
ﻩif (i〈=0)
{
ﻩprintf("没有找到该学生");
ﻩreturn;
ﻩ}
while(j<i—1&&p!=NULL)
ﻩ{
j++;
p=p->next;
}
if(p==NULL)
ﻩ{
printf("没有找到该学生");
ﻩ return ;
}
else
ﻩ{
ﻩﻩq=p->next;
ﻩﻩif(q==NULL)
ﻩ return ;
ﻩ p—>next=q-〉next;
free(q);
ﻩﻩcount=count—1;
ﻩﻩprintf("删除成功!\n”);
return;
ﻩ}
}
int Locate_Student(LinkList *L,char* mun) //按学号定位,返回第i个学生
{
ﻩint i=1;
ﻩLinkList *p=L-〉next;
ﻩwhile(p!=NULL&&strcmp(p-〉mun,mun)!=0)
ﻩ{
ﻩi++;
p=p->next;
ﻩ}
if(p==NULL)
ﻩreturn (0);
else
ﻩ return (i);
}
int Locate_Student1(LinkList *L,char* name) //按姓名定位,返回第i个学生
{
int i=1;
ﻩLinkList *p=L->next;
while(p!=NULL&&strcmp(p—>name,name)!=0)
{
i++;
ﻩﻩp=p-〉next;
}
ﻩif(p==NULL)
ﻩ return (0);
else
ﻩ return (i);
}
void Queue_Subject(LinkList *&L) //不同科目排序
{
int i;
ﻩLinkList *q,*p,*t1,*t2;
ﻩprintf("请输入科目得代号:1 数据结构 2 数字信号处理 3 数电\n请输入:”);
ﻩscanf(”%d",&i);
ﻩif(i>=1||i<=3)
ﻩ{
ﻩ for(q=L;q—>next!=NULL;q=q—>next)
ﻩfor(p=q—〉next;p—>next!=NULL;p=p-〉next)
ﻩ {
ﻩ if(q->next->score[i—1]>p->next->score[i—1])
ﻩ ﻩﻩ{
ﻩ ﻩif(q->next==p)
ﻩﻩ {
ﻩﻩt1=p—〉next;
ﻩ ﻩp—〉next=p—〉next-〉next;
ﻩﻩ ﻩt1->next=q—〉next;
ﻩﻩﻩ q—>next=t1;
ﻩ ﻩﻩﻩp=t1;
ﻩﻩﻩﻩ}
ﻩﻩ ﻩ else
ﻩﻩﻩ {
ﻩ ﻩﻩ t1=p->next;
ﻩ ﻩﻩ t2=q—>next;
ﻩﻩﻩ ﻩ p—>next=p—>next-〉next;
ﻩ ﻩﻩq->next=q—〉next-〉next;
ﻩ ﻩﻩt1->next=q-〉next;
ﻩ ﻩq—>next=t1;
ﻩ ﻩﻩ t2-〉next=p—>next;
ﻩ p->next=t2;
ﻩ ﻩ}
ﻩﻩ ﻩ}
ﻩ ﻩ}
}
else
{
ﻩprintf(”没有找到该科目!\n");
ﻩﻩreturn;
}
}
void Queue_Student(LinkList *&L) //排序函数
{
ﻩint i,j=1;
printf(”1、按照学号 2、总分3、按各科分排序\n请输入:");
scanf("%d",&i);
LinkList *q,*p,*t1,*t2;
switch(i)
{
ﻩcase 1: //学号排序
ﻩfor(q=L;q->next!=NULL;q=q-〉next)
for(p=q->next;p->next!=NULL;p=p->next)
ﻩﻩ{
ﻩﻩ ﻩif(strcmp(q—〉next—>mun,p—>next->mun)==1)
ﻩﻩﻩ{
ﻩif(q->next==p)
ﻩ {
ﻩﻩ ﻩ t1=p-〉next;
ﻩ ﻩﻩ p—>next=p—>next-〉next;
ﻩﻩ ﻩﻩﻩt1—>next=q—>next;
ﻩﻩﻩq->next=t1;
ﻩ ﻩ ﻩp=t1;
ﻩﻩﻩﻩ}
ﻩ ﻩ ﻩelse
ﻩﻩ {
ﻩﻩﻩﻩ ﻩt1=p—>next;
ﻩﻩ ﻩ t2=q-〉next;
ﻩﻩ p—>next=p—>next->next;
ﻩ ﻩﻩﻩ q—〉next=q-〉next—>next;
ﻩ ﻩ t1->next=q->next;
ﻩﻩﻩ q->next=t1;
ﻩ ﻩt2-〉next=p-〉next;
ﻩﻩp-〉next=t2;
ﻩ }
ﻩ ﻩ }
ﻩﻩ }
ﻩ ﻩbreak;ﻩ
ﻩcase 2: //总分排序
for(q=L;q—〉next!=NULL;q=q-〉next)
for(p=q->next;p—〉next!=NULL;p=p-〉next)
ﻩﻩﻩ{
ﻩ ﻩ if(q->next->all_score>p—>next—〉all_score)
ﻩﻩ {
ﻩﻩﻩ ﻩif(q-〉next==p)
ﻩﻩ{
ﻩ t1=p->next;
ﻩﻩﻩ p->next=p—>next-〉next;
ﻩ ﻩﻩt1—>next=q->next;
ﻩﻩ q->next=t1;
ﻩﻩ ﻩﻩﻩp=t1;
ﻩﻩ ﻩ }
ﻩ ﻩﻩelse
ﻩ ﻩﻩ {
ﻩ ﻩﻩ t1=p-〉next;
ﻩﻩﻩﻩ ﻩt2=q->next;
ﻩﻩﻩﻩﻩp—>next=p—>next-〉next;
ﻩﻩﻩq—>next=q—>next-〉next;
ﻩ ﻩ ﻩt1—〉next=q->next;
ﻩ ﻩﻩﻩ q—>next=t1;
ﻩﻩ t2->next=p—〉next;
ﻩﻩ p-〉next=t2;
ﻩﻩ ﻩﻩ}
ﻩﻩ }
ﻩﻩﻩ}
ﻩ ﻩbreak;
ﻩcase 3:
ﻩQueue_Subject(L); //科目排序
ﻩ break;
ﻩ}ﻩ
}
void Out_one_Student(LinkList *L,int i) //输出第i个学生
{
ﻩint j=0;
LinkList *p=L;
while(j<i)
{
ﻩj++;
ﻩﻩp=p—>next;
}
ﻩprintf("%—9s%-9s%—10、1f%—10、1f%-10、1f%-8、1f %-10、1f\n”,p->mun,p-〉name,p->score[0],p—〉score[1],p—〉score[2],p->all_score,p->ave_score);
}
int Seek_Student(LinkList *L) //查找学生 1 按学号查找 2 按姓名查找
{
int m;
ﻩprintf("1 按学号查找 2 按姓名查找 3 退出\n请输入:”);
scanf("%d",&m);
switch(m)
{
case 1:
char a[12];
ﻩprintf("输入学号:");
ﻩscanf("%s”,&a);ﻩﻩ
ﻩ return (Locate_Student(L,a)); //返回学号查找到得值
ﻩbreak;
ﻩcase 2:
ﻩ char b[20];
ﻩprintf("输入姓名:");
ﻩﻩscanf(”%s",&b);
ﻩreturn(Locate_Student1(L,b));
break;
ﻩcase 3:
ﻩbreak;
ﻩ}
}
void Filter_Student(LinkList *&L) //筛选
{
LinkList *s,*p=L-〉next,*r,*q;
ﻩint y,count2=0;
ﻩprintf("1 按总分选 2 全部及格得人 3 按各科成绩 4 退出\n请输入:”);
ﻩscanf("%d”,&y);
ﻩswitch(y)
{
case 1:
s=(LinkList *)malloc(sizeof(LinkList));
ﻩﻩq=s;
ﻩﻩint i;
ﻩﻩfloat all;
ﻩ printf("您要总分多少分以上得人,请输入:”);
ﻩscanf(”%f",&all);
ﻩfor (i=0;i〈count;i++,p=p—〉next)
{
ﻩif (p==NULL)
ﻩ {
ﻩ ﻩﻩprintf("没有”);
ﻩﻩreturn;
ﻩ}
ﻩ if(p-〉all_score〉all)
ﻩﻩ{
ﻩﻩ ﻩr=(LinkList *)malloc(sizeof(LinkList));
ﻩﻩﻩ strcpy(r—>mun,p—>mun);
ﻩﻩﻩstrcpy(r->name,p—>name);
ﻩﻩ r->score[1]=p-〉score[1];
ﻩr—〉score[2]=p->score[2];
ﻩ ﻩr—>score[0]=p—>score[0];
ﻩﻩﻩﻩr—>all_score=p-〉all_score;
ﻩ ﻩr-〉ave_score=p->ave_score;
ﻩﻩ ﻩq—>next=r;
ﻩﻩq=q—>next;
ﻩﻩ ﻩq—>next=NULL;
ﻩ count2++;
ﻩ }
ﻩ}
ﻩ output_Student(s,count2);
free(s);
ﻩbreak;
case 2:
ﻩﻩs=(LinkList *)malloc(sizeof(LinkList));
ﻩq=s;
ﻩﻩint j;
ﻩﻩfor (j=0;j<count;j++,p=p->next)
ﻩ{
if (p==NULL)
ﻩ {
ﻩ printf(”没有");
ﻩﻩ return;
ﻩﻩ}
ﻩif(p—>score[0]>59&&p—〉score[1]>59&&p—〉score[2]>59)
{
ﻩﻩ ﻩr=(LinkList *)malloc(sizeof(LinkList));
strcpy(r-〉mun,p->mun);
ﻩ ﻩstrcpy(r-〉name,p-〉name);
ﻩﻩ ﻩr->score[1]=p—>score[1];
ﻩﻩ r-〉score[2]=p->score[2];
ﻩ ﻩ r-〉score[0]=p—〉score[0];
ﻩ ﻩr-〉all_score=p—>all_score;
ﻩ r->ave_score=p—〉ave_score;
ﻩﻩﻩ q—〉next=r;
ﻩﻩ ﻩq=q->next;
ﻩﻩq—>next=NULL;
ﻩ count2++;
ﻩ}
ﻩ }
ﻩ output_Student(s,count2);
free(s);
ﻩﻩbreak;
case 3:
ﻩ s=(LinkList *)malloc(sizeof(LinkList));
ﻩ q=s;
ﻩint k,x;
ﻩ printf("选择 1 数据结构及格得 2 数字信号处理及格得 3 数电及格得\n");
ﻩprintf(”请输入:");
ﻩscanf("%d”,&x);
ﻩfor (k=0;k<count;k++,p=p->next)
ﻩ{
ﻩﻩif (p==NULL)
ﻩﻩﻩ{
ﻩﻩ printf("没有");
ﻩreturn;
ﻩﻩ}
ﻩﻩﻩif(p—>score[x-1]>59)
ﻩ{
r=(LinkList *)malloc(sizeof(LinkList));
ﻩﻩﻩstrcpy(r—>mun,p->mun);
ﻩstrcpy(r->name,p->name);
ﻩ ﻩ r—〉score[1]=p->score[1];
ﻩ ﻩﻩr—〉score[2]=p->score[2];
ﻩ ﻩ r-〉score[0]=p—〉score[0];
ﻩﻩr-〉all_score=p->all_score;
ﻩ ﻩr-〉ave_score=p->ave_score;
ﻩﻩﻩ q-〉next=r;
ﻩﻩﻩﻩq=q—>next;
ﻩ ﻩﻩq->next=NULL;
ﻩ count2++;
ﻩﻩﻩ}
}
ﻩoutput_Student(s,count2);
ﻩﻩfree(s);
ﻩ break;
ﻩcase 4:
break;
}
}
bool Insert_Student(LinkList *&L,int i) //插入学生
{
int j=0;
ﻩLinkList *p=L,*s;
ﻩif (i〈=0)
ﻩ{
ﻩ printf("对不起,没有该位置!\n");
ﻩreturn false;
ﻩ}
while(j〈i-1&&p!=NULL)
{
ﻩj++;
ﻩ p=p—>next;
ﻩ}
if(p==NULL)
{
ﻩprintf("对不起,没有该位置!\n");
ﻩﻩreturn false;
ﻩ}
else
ﻩ{
ﻩs=(LinkList *)malloc(sizeof(LinkList));
ﻩs—〉next=NULL;
ﻩ float all,ave,score;
ﻩﻩprintf("输入学生学号、姓名、每科成绩\n");
ﻩprintf("学号:”);
scanf("%s”,&s-〉mun);
ﻩ printf(”姓名:");
ﻩﻩscanf("%s",&s—>name);
ﻩﻩfor(i=0;i<3;i++)
ﻩ{
ﻩif(i==0)
ﻩﻩ{
ﻩ printf(”输入数据结构分数\n”);
ﻩﻩ scanf(”%f",&score);
ﻩs—>score[i]=score;
}
ﻩﻩif(i==1)
ﻩﻩ {
ﻩ ﻩprintf("输入数字信号处理分数\n");
ﻩﻩ ﻩscanf(”%f",&score);
ﻩ ﻩs->score[i]=score;
ﻩ }
ﻩﻩﻩif(i==2)
ﻩ {
ﻩ ﻩﻩprintf("输入数字电子技术基础分数\n");
scanf("%f”,&score);
ﻩ s—〉score[i]=score;
}
ﻩﻩ}
ﻩﻩall=s—>score[1]+s—>score[2]+s—>score[0];
ﻩ s—〉all_score=all;
ave=(s->score[0]*3、0+s->score[1]*4、0+s->score[2]*2、5)/9、5;
s-〉ave_score=ave;
ﻩ s->next=p-〉next;
ﻩﻩp—〉next=s;
ﻩﻩcount++;
ﻩ printf("插入成功\n");
ﻩreturn true;
}
}
int menu_select() /*菜单选择程序*/
{
ﻩint c;
ﻩdo{
ﻩﻩsystem("cls”);
printf("\n\t 欢迎使用学生成绩管理系统 \n”);
ﻩprintf(”\t 1、 添加学生 \n”);
ﻩprintf("\t 2、 输出学生 \n”);
ﻩprintf(”\t 3、 插入学生 \n”);
ﻩ printf("\t 4、 删除学生 \n”);
ﻩ printf(”\t 5、 查找学生 \n");
ﻩprintf(”\t 6、 排序 \n");
printf("\t 7、 筛选 \n");
ﻩprintf(”\t 0、 退出程序 \n");
printf(”\t **************************\n");
printf("\t 请您选择(0—7):");
ﻩﻩscanf("%d”,&c);
ﻩ}
while(c〈0||c>7);
ﻩreturn(c);
}
void main()
{
LinkList *h;
ﻩInitList(h); //初始化
ﻩfor(;;)
{
switch(menu_select())
ﻩﻩ{
ﻩ case 1: //添加学生
ﻩﻩ Creat_Student(h); //添加学生
ﻩ break;
ﻩ case 2:
ﻩﻩ output_Student(h,count); //输出全部学生
ﻩ break;
ﻩ case 3: //插入
ﻩﻩﻩint w;
ﻩprintf(”输入插入得位置,位置为大于或等于1得数,(如1、2、、、)\n");
ﻩ ﻩprintf(”请输入:");
ﻩ scanf("%d”,&w);
ﻩ ﻩInsert_Stud
展开阅读全文