学生成绩管理系统源程序
课程设计-学生成绩管理系统

数据结构课程设计报告题目:学生成绩管理系统学生姓名:学号:班级:指导教师:课程设计评分表学生姓名:班级:学号:课程设计题目:学生成绩管理任务:本题对学生的某门课程成绩管理做一个简单的模拟,设计一个学生成绩管理系统。
假设学生信息包括:学号、姓名、性别,课程的成绩信息有平时成绩、实验成绩、期未成绩、总评成绩,总评成绩=平时成绩*0.4+实验成绩*0.3+期未成绩*0.3,用菜单选择方式完成下列功能:(1)登记学生成绩;(2)插入学生成绩;(3)修改学生成绩;(4)删除学生成绩;(5)查询学生成绩;(5)对学生成绩进行排序;(6)输出学生成绩。
在完成上术基本要求的操作后,要应用功能(6)进行测试。
一、设计思路二、设计说明与调试分析三、源程序代码四、测试结果五、设计心得六、参考文献一、设计思路本系统是一个学生成绩管理系统,输入数据类型主要是string等数据类型,输入内容包括:学生学号、姓名、平时成绩、实验成绩、期末成绩等数据。
用户在输入学生数据时要保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确。
输出形式与输入形式类似,根据需要可以选择显示输入的各项内容,显示内容包括:学生学号、姓名、平时成绩、实验成绩、期末成绩,总评成绩。
用户运行程序后进入系统主界面在主界面用户可以输入所有学生的数据并保存到文件中,也可以读取文件中已有的学生数据。
本系统同时只能对一个数据文件进行相关操作。
当用户读取学生数据后可对其进行显示、文件尾增加、删除、查询、排序、修改等相关操作。
用户在操作过程中可随时对当前文件进行保存到文件操作,以防止修改的数据丢失。
二、设计说明与调试分析主要编写部分学生成绩管理系统学生成绩管理系统内,共有两个类,分别为学生类和管理类。
学生对象用vector容器来存放。
管理类共包含了7个不同的函数,而每一个函数是一个模块,并对它们具体编写,使之具有不同的功能,能实行相应的操作。
2.1 本程序中定义的类及其函数:1.Student 类class Student//定义一个Student类//{public:Student(string nu = "0", string na = "0", int ping = 0, int shi = 0, int qi = 0);void set_student(const string &Nu, const string &Na, int Ping, int Shi, int Qi);void set_pingshi(int ping) { pingshi = ping; }//类成员函数set_pingshi,设置平时成绩//void set_shiyan(int shi) {shiyan = shi; }//类成员函数set_shiyan,设置实验成绩//void set_qimo(int qi) { qimo = qi; } //类成员函数set_qimo,设置期末成绩//bool search(const string &num) { return number == num; }void display();//声明display显示函数//bool operator<(const Student&);//运算符重载//Student& swap(Student&);public:string number; //定义学生的学号//string name; //定义学生的姓名//int pingshi/*平时成绩*/,shiyan/*实验成绩*/, qimo/*期末成绩*/;};2. Manage 主要功能类class Manage//主要功能类//{private:vector <Student> stu;public:Manage() {}void Add(Student&s);//声明添加学生信息的函数//void Add2(Student&s);//声明登记学生信息的函数//void Chaxun(); //声明查询学生信息的函数//void Paixu();//声明将学生的成绩的平均数进行排序的函数//void Revise(); //声明修改学生信息的函数//void Delete(); //声明删除学生信息的函数//void Save(); //声明存储学生信息的函数//void Load(); //声明读取学生信息的函数//void Play(); //声明显示学生信息的函数//};2.2 管理类中各模块功能分析1、登记学生信息,登记大量学生信息包括增添学生的姓名、学号、平时成绩、实验成绩、期末成绩等用void Add2(Student&s)函数去实现。
学生成绩管理系统,数据结构课程设计

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:学生成绩管理系统已知技术参数和设计要求:现有学生成绩信息文件1(cj1。
txt),内容如下姓名学号语文数学英语张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47…. 。
. 。
…学生成绩信息文件2(cj2.txt),内容如下:姓名学号语文数学英语陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77…. 。
.. .. …试编写一管理系统,其基本功能要求:实现对两个文件数据进行合并,生成新文件cj3.txt抽取出三科成绩中有补考的学生并保存在一个新文件cj4.txt对合并后的文件3。
txt中的数据按总分降序排序(至少采用两种排序方法实现)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)要求使用结构体,链或数组等实现上述要求。
采用多种方法且算法正确者,可适当加分。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)数据结构课程设计说明书一、需求分析1、问题描述现如今,学校人数的暴涨,对学生基本信息的录入,保存量越来越大,为了简化对工作人员的操作,故设计一个程序来完成对学生基本信息的录入,保存,编辑等简单操作。
2、基本任务(1)对学生信息表cj1和cj2进行合并;(2)把合并的信息生成cj3;(3)把cj3中有补考的学生信息生成cj4;(4)对合并后的文件3。
txt中的数据按总分降序排序;(5)输入一个学生姓名后,能查找到此学生的信息并输出结果。
二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:1、主界面设计为了实现学生成绩管理系统的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。
数据结构课程设计-学生成绩管理系统

广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术6班学院:智能制造学院专业:指导教师:目录一、问题描述与基本要求 (3)1.1问题描述 (3)1.2基本要求 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3重要函数的定义及说明 (4)三、软件模块结构图....................... 错误!未定义书签。
3.1大体模块关系图 (13)3.2各模块具体分析..................... 错误!未定义书签。
四、程序流程图 (15)五、源程序 (17)六、调试分析............................. 错误!未定义书签。
6.1程序错误修改及完善的过程 (37)6.2最终程序所有功能运行结果........... 错误!未定义书签。
6.3测试数据 (39)七、用户使用手册 (40)八、心得体会............................. 错误!未定义书签。
一、问题描述与基本要求1.1问题描述设计一个学生管理系统,建立初始学生成绩,添加/插入,查找,修改,删除学生成绩。
1.2基本要求系统设计要求:1、能比较迅速地实现添加学生的学号,姓名和成绩2、能比较迅速地通过学生的学号或姓名查询、修改或删除学生成绩3、当有学生时,输出所有学生的成绩信息,包括语文,数学,英语的成绩二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现添加、查询、修改、删除学生成绩的的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
学生成绩管理系统C语言源程序

for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
char xueqi[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
学生成绩管理系统源代码

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dos.h>#include<ctype.h>#include<conio.h>#include<stddef.h>#include<time.h>#define PRINT1 textcolor(12); cprintf("\r 请按任意键返回主菜单\n\r");textcolor(10); getch();clrscr(); break;int shoudsave=0;struct student /* 学生信息结构体定义*/{char num[10],name[20],cla[4];int score1,score2,score3,total,ave;};typedef struct node{struct student data;struct node *next;}Node,*L;void print1(){cprintf("\r======================================================================= =========");}void print2(){cprintf("\n\r 1.输入学生成绩信息在这里你可以按照提示输入学生的班级,学号,姓名及各科成绩.\n");cprintf("\n\r 2.注销学生成绩信息在这里你可以按照学号或姓名将某名学生的信息从本系统中删除.\n");cprintf("\n\r 3.查询学生成绩信息在这里你可以按照学号或姓名查询某一名学生的信息.\n");cprintf("\n\r 4.修改学生成绩信息在这里你可以按照提示修改某一名学生的学号,姓名及各科成绩.");cprintf("\n\r 5.学生成绩信息排序在这里你可以看到所有学生的各科成绩.\n"); cprintf("\n\r 6.学生成绩信息统计在这里本系统将为你显示所有科目的最高分及最低分所得学生.\n");cprintf("\n\r 7.显示学生成绩信息在这里你可以看到系统中所有学生的信息.\n"); cprintf("\n\r 8.保存学生成绩信息在这里你可以将学生你信息保存到内存中.\n"); cprintf("\n\r 9.帮助学生成绩信息在这里你可以获得帮助信息.\n");cprintf("\n\r 0.退出系统在这里选择是否保存后,你可以安全的退出本系统.\n\n\r ");}void menu(){cprintf("\n\r\xc9\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xc d\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcb\xcd\xcd\xcd\xcd\ xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xc d\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xbb");cprintf("\r\xba 学生信息导入\xba 学生信息处理\xba");cprintf("\r\xba____________________________________\xba___________________________ _______________\xba");cprintf("\r\xba 1-->输入学生成绩信息\xba 6-->学生成绩信息统计\xba");cprintf("\r\xba 2-->注销学生成绩信息\xba 7-->显示学生成绩信息\xba");cprintf("\r\xba 3-->查询学生成绩信息\xba 8-->保存学生成绩信息\xba");cprintf("\r\xba 4-->修改学生成绩信息\xba 9-->帮助学生成绩信息\xba");cprintf("\r\xba 5-->学生成绩信息排序\xba 0-->退出系统\xba");cprintf("\r\xc8\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\ xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xca\xcd\xcd\xcd\xcd\xc d\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\ xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xbc");}void wrong(){cprintf("\n\r输入错误!请验证后重新输入.\n");}void notfind(){cprintf("\n\r该学生信息不存在!请验证后重新输入.\n");}void printc() /* 此函数用于输出中文格式*/{cprintf("\r学号姓名班级英语数学C语言总分平均分\n ");}void printe(Node *p) /* 此函数用于输出英文格式*/{cprintf("\r%-4s%-4s%4s%5d%5d%8d%5d%7d\n\r",p->data.num,p->,p->data.cla,p->dat a.score3,p->data.score2,p->data.score1,p->data.total,p->data.ave);}Node* Locate(L l,char findinfo[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针*/{Node *r;if(strcmp(nameornum,"num")==0)/* 按学号查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findinfo)==0)return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /* 按姓名查询*/{r=l->next;while(r!=NULL){if(strcmp(r->,findinfo)==0)return r;r=r->next;}}return 0;}void input(L l) /* 增加学生*/{Node *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;/* 将指针置于最末尾*/while(1){ cprintf("\r如果输入完毕,请按任意键返回主菜单\n");cprintf("\r如果你还想输入,请按y(yes)继续\n\r");scanf("%s",num);if(strcmp(num,"y")==0){ cprintf("请你输入学号:");scanf("%s",num); } else break;while(s){if(strcmp(s->data.num,num)==0){printf("\t学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);print1();printc();printe(s);print1();printf("\n");getch();return;}s=s->next;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);cprintf("\r请你输入姓名:");scanf("%s",p->);getchar();cprintf("\r请你输入班级:");scanf("%s",p->data.cla);getchar();cprintf("\r请你输入c语言成绩(0-100):");scanf("%d",&p->data.score1);getchar();cprintf("\r请你输入数学成绩(0-100):");scanf("%d",&p->data.score2);getchar();cprintf("\r请你输入英语成绩(0-100):");scanf("%d",&p->data.score3);getchar();p->data.total=p->data.score3+p->data.score1+p->data.score2;p->data.ave=p->data.total / 3; /* 信息输入已经完成*/p->next=NULL;r=p;shoudsave=1;}}void query(L l) /* 查询学生信息*/{int select;char findinfo[20];Node *p;if(!l->next){cprintf("\n 没有信息可以查询!\n");return;}cprintf("\n1==>按学号查找\n\r2==>按姓名查找\n\r");scanf("%d",&select);if(select==1) /* 学号*/{cprintf("\r请你输入要查找的学号:");scanf("%s",findinfo);p=Locate(l,findinfo,"num");if(p){cprintf(" 查找结果\n\r");print1();printc();printe(p);print1();}elsenotfind();}else if(select==2) /* 姓名*/{cprintf("\r请你输入要查找的姓名:");scanf("%s",findinfo);p=Locate(l,findinfo,"name");if(p){cprintf(" 查找结果\n\r");print1();printc();print1();}elsenotfind();}elsewrong();}void Delete(L l) /* 删除学生信息*/{int select;Node *p,*r;char findinfo[20];if(!l->next){cprintf("\n 没有信息可以删除!\n");return;}cprintf("\n1==>按学号删除\n\r2==>按姓名删除\n\r");scanf("%d",&select);if(select==1){cprintf("\r请你输入要删除的学号:");scanf("%s",findinfo);p=Locate(l,findinfo,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);cprintf("\n\r该学生已经成功删除!\n");shoudsave=1;}elsenotfind();}else if(select==2){cprintf("\r请你输入要删除的姓名:");scanf("%s",findinfo);p=Locate(l,findinfo,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);cprintf("\n\r该学生已经成功删除!\n");shoudsave=1;}elsenotfind();}else wrong();}void modify(L l) /*修改学生信息*/{Node *p;char findinfo[20];if(!l->next){cprintf("\n\r没有信息可以修改!\n");return;}cprintf("\r请你输入要修改的学生学号:");scanf("%s",findinfo);p=Locate(l,findinfo,"num");if(p){cprintf("\r请你输入新学号(原来是%s):",p->data.num);scanf("%s",p->data.num);cprintf("\r请你输入新姓名(原来是%s):",p->);scanf("%s",p->);getchar();cprintf("\r请你输入新班级(原来是%s):",p->data.cla);scanf("%s",p->data.cla);cprintf("\r请你输入新的c语言成绩(原来是%d分):",p->data.score1);scanf("%d",&p->data.score1);getchar();cprintf("\r请你输入新的数学成绩(原来是%d分):",p->data.score2);scanf("%d",&p->data.score2);getchar();cprintf("\r请你输入新的英语成绩(原来是%d分):",p->data.score3);scanf("%d",&p->data.score3);p->data.total=p->data.score3+p->data.score1+p->data.score2;p->data.ave=p->data.total/3;cprintf("\n\r信息修改成功!\n");shoudsave=1;}elsenotfind();}void display(L l){/*显示全部学生信息*/int count=0;Node *p;p=l->next;if(!p){cprintf("\n\r 没有信息可以显示!\n");return;}cprintf(" 显示结果");print1();printc();while(p){ if(count%5==0) getch();printe(p);p=p->next;count++;}print1();cprintf("\n");}void Statistic(L l) /*统计学生信息*/{Node *pm_max,*pe_max,*pc_max,*pt_max,*pa_max; /* 用于指向分数最高的接点*/ Node *pm_min,*pe_min,*pc_min,*pt_min,*pa_min;Node *r=l->next;if(!r){cprintf("\n\r 没有信息可以统计!\n");return ;}pm_max=pe_max=pc_max=pt_max=pa_max=pm_min=pe_min=pc_min=pt_min=pa_min=r; while(r!=NULL){if(r->data.score1>=pc_max->data.score1)pc_max=r;if(r->data.score1<=pc_min->data.score1)pc_min=r;if(r->data.score2>=pm_max->data.score2)pm_max=r;if(r->data.score2<=pm_min->data.score2)pm_min=r;if(r->data.score3>=pe_max->data.score3)pe_max=r;if(r->data.score3<=pe_min->data.score3)pe_min=r;if(r->data.total>=pt_max->data.total)pt_max=r;if(r->data.total<=pt_min->data.total)pt_min=r;if(r->data.ave>=pa_max->data.ave)pa_max=r;if(r->data.ave<=pa_min->data.ave)pa_min=r;r=r->next;}cprintf("====================================统计结果====================================\n");cprintf("\r总分最高者: %-16s %d分\n",pt_max->,pt_max->data.total); cprintf("\r平均分最高者: %-16s %d分\n",pa_max->,pa_max->data.ave); cprintf("\r英语最高者: %-16s %d分\n",pe_max->,pe_max->data.score3); cprintf("\r数学最高者: %-16s %d分\n",pm_max->,pm_max->data.score2); cprintf("\rc语言最高者: %-16s %d分\n\r",pc_max->,pc_max->data.score1); cprintf("\r总分最低者: %-16s %d分\n",pt_min->,pt_min->data.total); cprintf("\r平均分最低者: %-16s %d分\n",pa_min->,pa_min->data.ave); cprintf("\r英语最低者: %-16s %d分\n",pe_min->,pe_min->data.score3); cprintf("\r数学最低者: %-16s %d分\n",pm_min->,pm_min->data.score2); cprintf("\rc语言最低者: %-16s %d分\n\r",pc_min->,pc_min->data.score1); print1();}void Sort(L l){L ll;Node *p,*rr,*s;ll=(L)malloc(sizeof(Node)); /* 用于做新的连表*/ll->next=NULL;if(l->next==NULL){cprintf("\n\r 没有信息可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息*/s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL && rr->next->data.total>=p->data.total)rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;cprintf("\n\r 排序已经完成!\n");}void Save(L l) /* */{FILE* fp;Node *p;int flag=1,count=0;fp=fopen("c:\\student","wb");if(fp==NULL){cprintf("\n\r 重新打开文件时发生错误!\n");exit(1);}p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}else{flag=0;break;}}if(flag){cprintf("\n\r 文件保存成功.(有%d条信息已经保存.)\n\r",count);shoudsave=0;}fclose(fp);}void main() /* */{L l; /* 链表*/FILE *fp; /* 文件指针*/int count=0 ,i,menu_select; /*菜单选择*/char ch ,creat;Node *p,*r;time_t it;clrscr();textmode(C80);window(1,1,80,25);textbackground(1); clrscr();textcolor(10);printf("\r 学生成绩管理系统");printf("\r -------扬州大学信息工程学院软件0902班") ;printf("\r 设计人员:李天鹏");l=(Node*)malloc(sizeof(Node));l->next=NULL;r=l;fp=fopen("c:\\student","rb");if(fp==NULL){cprintf("\n\r 该文件还未存在,是否需要创建?(y/n,Y/N)\n\r");scanf("%c",&creat);if(creat=='y'||creat=='Y'){fp=fopen("c:\\student","wb");}elseexit(0);}gotoxy(9,11); textcolor(12);cprintf("\n\r 文件已经打开,系统正在导入信息");for(i=0;i<6;i++){ cprintf(".");sleep(1);}textcolor(10);gotoxy(9,11); cprintf("\n ");while(!feof(fp)){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中*/{p->next=NULL;r->next=p;r=p; /* 将该接点挂入连中*/count++;}}fclose(fp);/* 关闭文件*/gotoxy(1,3);cprintf("\n\r信息导入完毕,系统共导入%d条信息",count);sleep(1);while(1){ menu();textcolor(12);cprintf("\r现在时间: "); it=time(NULL);cprintf(ctime(&it));cprintf("\r左边数字对应功能选择,请按0--9选择操作:\n\r");textcolor(10) ;scanf("%d",&menu_select);if(menu_select==0){if(shoudsave==1){ getchar(); textcolor(128+12);cprintf("\n\r 信息已经改动,是否将改动保存到文件中(y/n Y/N)?\n\r"); scanf("%c",&ch);if(ch=='y'||ch=='Y')Save(l);}cprintf("\n\r 你已经成功退出学生成绩信息系统,欢迎下次继续使用!\n"); break;}switch(menu_select){case 1: clrscr(); input(l); clrscr(); break; /* 输入学生*/case 2: clrscr(); Delete(l); PRINT1 /* 删除学生*/case 3: clrscr(); query(l); PRINT1 /* 查询学生*/case 4: clrscr(); modify(l); PRINT1 /* 修改学生*/case 5: clrscr(); Sort(l); PRINT1case 6: clrscr(); Statistic(l); PRINT1case 7: clrscr(); display(l); PRINT1case 8: clrscr(); Save(l); PRINT1 /* 保存学生*/case 9: clrscr(); cprintf(" ==========帮助信息==========\n");print2(); PRINT1 ;default: wrong(); getchar(); break;}}}。
C语言学生成绩管理系统课程设计

课程设计说明书设计名称: C语言课程设计题目:学生成绩管理系统学生姓名:专业:网络工程班级: 12级1班学号: 2012394108指导教师:日期:年月日课程设计任务书网络工程专业 12 年级 1 班孙璐一、设计题目学生成绩管理系统二、主要内容数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。
要求具有以下功能:(1)系统以菜单方式工作。
(2)显示、保存记录;添加、删除、修改任意个记录。
(3)排序功能:打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),存盘并显示这两个文件的全部记录。
(4)查询功能:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。
并能按学号或姓名查找并显示某个学生的各科成绩。
(5)统计功能:对各科成绩统计分析(平均分、最高分、最低分、及格率等);统计各科各分数段人数。
三、具体要求围绕课程设计的目的和意义,基本要求如下:1、认真阅读《C语言课程设计》指导书,明确课程设计的目的、意义和要求;2、快速总结C程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用;3、快速熟悉Tuber C 或C++的上机环境。
能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。
4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。
如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。
5.学习并了解良好的程序设计风格。
按质、按量、并按时间完成课程设计的任务。
6.提供可运行的课程设计系统,参加上机面试答辩。
本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法)。
vf学生成绩管理系统流程图+组织结构设计图+管理职能图-课程设计

vf学生成绩管理系统流程图+组织结构设计图+管理职能图-课程设计目录第1章可行性分析 (4)1.1 成绩管理信息系统开发的必要性 (4)1.2 开发的可行性调查 (4)1.2.1技术方面 (4)1.2.2管理方面 (4)1.2.3经济方面 (4)1.3 可行性调查结果分析 (4)第2章系统分析 (6)2.1 组织机构 (6)2.2 管理职能分析 (6)2.2.1 管理职能图 (6)2.2.2 相关部门的管理职能 (7)2.3 业务流程分析 (7)2.4 数据流程分析 (8)2.5 现行系统评价 (9)2.6 系统优化 (10)2.7 数据字典 (12)2.8 本系统的运行环境 (17)第3章系统设计 (18)3.1 系统目标设计 (18)3.2 新系统功能模块设计 (18)3.2.1 系统主模块 (19)3.2.2 查询模块 (19)3.2.3 维护模块 (19)3.2.4 统计模块 (19)3.2.5 打印模块 (19)3.3 数据库设计 (19)3.3.1 数据库需求分析 (19)3.3.2 数据库概念设计 (19)3.3.3 数据可逻辑设计 (21)3.3.4 数据库结构的实现 (22)3.4 输入设计 (22)3.5 输出设计 (22)3.6 代码设计 (24)3.6.1 学生学号的代码设计 (24)3.6.2 课程号的代码设计 (24)第4章系统实施 (25)4.1 系统源程序 (25)4.2 试运行及结果分析 (27)第5章设计心得 (30)参考文献 (31)《学生成绩管理信息系统》学生成绩管理系统简介:学生成绩管理信息系统是针对学校教务处的大量业务处理工作而开发的管理软件,是典型的管理信息系统(Management Information System)。
它是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,它能够为用户提供充足的信息和快捷的查询手段。
能有效的帮助学校和老师掌握学生的情况,为学生提供成绩跟课程方面的查询。
学生成绩管理系统源代码

学生成绩管理系统源代码#include<stdio.h>#include<stdlib.h>int main(){typedef struct LNode{char name[6];int no;int yw;int sx;int yy;struct LNode *next;}LinkList;struct NameNo{int no;int yw;int sx;int total;char name[6];}st[10];FILE *fp,*fp1;char ch,sname[6];int x,i,j;NameNo tmp;LinkList *p,*s;printf("\n");printf("-------------------------------");printf("学生成绩管理系统");printf("--------------------------------");printf("\n\n");printf("在您的C盘根目录下是否有cj1.txt和cj2.txt文件?如果有请输入,1");printf("否则输入0;如果没有,那么程序将终止!1 or 0?");scanf("%d",&i);if(i==0) return 0;printf("\n\n");printf("对cj1.txt和cj2.txt进行合成请按‘1’");scanf("%d",&i);if(i!=1) return 0;printf("正在把cj1.txt和cj2.txt中的数据进行合并\n");printf("......\n.....\n....\n...\n..\n.\n");if((fp=fopen("c:\\cj1.txt","rt"))==NULL){printf("无cj1.txt文本文件,程序结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define PF printf#include "time.h "#define LEN sizeof(struct St1)//定义结构体//typedef struct St1{char IDNumber[16];/*学号*/char FamilyName[16]; /*姓*/char GivenName[16]; /*名*/int sex; /*性别(0代表"女",1代表"男")*/int BirthYear; /*出生年*/int BirthMonth; /*出生月*/int BirthDay; /*出生日*/float score0,score1,score2,score3; /*成绩*/float sum; /*总分*/float average; /*平均分*/struct St1 *next;}StudentNode;int time(){struct tm* ptm;long ts;int y,m,d,h,n,s;ts = time(NULL);ptm = localtime(&ts);y = ptm-> tm_year+1900; //年m = ptm-> tm_mon+1; //月d = ptm-> tm_mday; //日h = ptm-> tm_hour; //时n = ptm-> tm_min; //分s = ptm-> tm_sec; //秒return(y);}StudentNode *head=NULL; //全局指针int n,i=0,c=0,d=0,j=0; //全局变量j在函数中作数组下标或循环变量c为总分数组中元素个数d为平均分数组元素个数float English=0.0,Math=0.0,C=0.0,Mazhe=0.0,Sum[100],Avr[100]; //全局变量//自定义函数//void show_menu(); //显示菜单void menu(); //执行菜单void creat_stu(); //建立链表void input_stu(); //输入学生信息void print_stu(); //显示链表中所有记录信息void search_NO(); //以学号方式查询信息void search_name(); //以姓方式查询信息void arrage_stu(); //学生成绩排名void del_stu(); //删除学生信息void revise_stu(); //修改学生信息void save(); //保存信息void jisuan(); //计算所有学生的以及各科总分和均分void search_clas(); //按班级查询显示学生信息void insert_stu(); //插入学生记录到表中void sort(float x[],int n); //对学生按总分进行从高到底排序void search_allscore(); //按学生总成绩查询,用来输出排名信息void jieduan(); //用来输出按平均分阶段输出信息,其中用了按平均分输出信息的程序。
void Loadf(); //从文件中读出所有学生记录void main(){ printf("********************************************************************* ***********");printf("\n");printf(" 欢迎来到学生管理系统!");printf("\n");printf("\n");printf(" 制作人:陈志52101610");creat_stu();menu();}//**************************************创建链表**************************************void creat_stu(){FILE *fp;long size;StudentNode *p1,*p2;head=(StudentNode *)malloc(sizeof(StudentNode));head->next=NULL;if((fp=fopen("fname.txt","r"))==NULL){printf("这是新表\n");return;}fseek(fp,0L,2);size=ftell(fp);if(!size){printf("这是空表\n");return;} //开始创建链表rewind(fp); //移动到文件首p2=head->next; //找到当前位置while(!feof(fp)){p1=(StudentNode *)malloc(sizeof(StudentNode));fscanf(fp,"%s %s %s %d %d %d %d %f %f %f %f %f %f\n",p1->IDNumber,p1->FamilyName,p1 ->GivenName,\&p1->sex,&p1->BirthYear,&p1->BirthMonth,&p1->BirthDay,&p1->score0,&p1->score1,&p1->s core2,&p1->score3,&p1->sum, &p1->average);p1->next=NULL;//创建节点完if(head->next==NULL)head->next=p1;elsep2->next=p1;p2=p1;n++;}p2->next=NULL;fclose(fp);}//******************************************执行菜单******************************************void menu(){int c;show_menu();while(1){scanf("%d",&c);switch(c){getchar();case 1:input_stu();break;case 2:del_stu(); break;case 3:print_stu();break;case 4:search_name(); break;case 5:save();break;case 6:Loadf();break;case 7:jisuan(); break;case 8:search_clas(); break;case 9:insert_stu() ; break;case 10:search_NO(); break;case 11:arrage_stu();break;case 12:revise_stu(); break;case 13:jieduan();break;case 0:exit(0);} //执行菜单选项show_menu();}}//******************************************显示菜单******************************************void show_menu(){PF("\n");PF("\n**************************************菜单**************************************\n");PF("\t\t* 1.输入学生信息*\n");PF("\t\t* 2.删除学生信息*\n");PF("\t\t* 3.显示链表中所有记录信息*\n");PF("\t\t* 4.按照学生的姓查找记录*\n");PF("\t\t* 5.将链表中记录保存到文件中*\n");PF("\t\t* 6.从文件中读入记录*\n");PF("\t\t* 7.计算所有学生以及各科总分和均分*\n");PF("\t\t* 8.按班级查询显示学生信息*\n");PF("\t\t* 9.插入记录到表中*\n");PF("\t\t* 10.按学号查询学生信息*\n");PF("\t\t* 11.学生成绩排名*\n");PF("\t\t* 12.修改学生信息*\n");PF("\t\t* 13.按平均分阶段输出学生信息*\n");PF("\t\t* 0. 退出*\n");PF("*************************************************************************** *****\n");PF("\n请选择\n");}//******************************************输入学生信息******************************************void input_stu() //输入学生信息{float a,b; //a,b分别用来存放该生的各科总成绩和平均成绩int y,j;y=time();n=0;StudentNode *p1=NULL,*p2=NULL;p1=( StudentNode *)malloc(sizeof(StudentNode));PF("\n**********************************输入学生信息**********************************\n"); //输入学生信息PF("\t\t输入学生学号:\t");scanf("%s",p1->IDNumber); //学号PF("\t\t输入学生的姓:\t");scanf("%s",p1->FamilyName); //姓PF("\t\t输入学生的名:\t");scanf("%s",p1->GivenName); //名PF("\t\t输入学生性别(0代表女,1代表男):\t");scanf("%d",&p1->sex); //性别for(j=0;;j++) //判断输入年份是否合理,假设人年龄在0-100岁之间为正常{PF("\t\t输入学生出生年:\t");scanf("%d",&p1->BirthYear); //出生年if((y-p1->BirthYear)>100||(p1->BirthYear>y))PF("\t\t年份输入错误不符合要求,请重新输入出生年份:\t");elsebreak;}for(j=0;;j++) //判断输入月份是否合理{PF("\t\t输入学生出生月:\t");scanf("%d",&p1->BirthMonth); //出生月if(p1->BirthMonth<1||p1->BirthMonth>12)PF("\t\t月份输入错误不符合要求,请重新输入出生月份:\t");elsebreak;}for(j=0;;j++) // 判断输入出生日是否合理{ PF("\t\t输入学生出生日:\t");scanf("%d",&p1->BirthDay); //出生日if(p1->BirthDay<1||p1->BirthDay>31)PF("\t\t出生日输入错误不符合要求,请重新输入出生日:\t");elsebreak;}PF("\t\t输入学生的外语成绩:\t");scanf("%f",&p1->score0); //各科成绩PF("\t\t输入学生的数学成绩:\t");scanf("%f",&p1->score1);PF("\t\t输入学生的C语言成绩:\t");scanf("%f",&p1->score2);PF("\t\t输入学生的马哲成绩:\t");scanf("%f",&p1->score3);a=p1->score0+p1->score1+p1->score2+p1->score3; //求该生的各科总成绩b=(a/4); //求该生的平均成绩p1->sum=a;p1->average=b;English=English+p1->score0; //求学生英语总分Math=Math+p1->score1; //求学生数学总分C=C+p1->score2; //求学生C语言总分Mazhe=Mazhe+p1->score3; //求学生马哲总分Sum[c++]=a; //将各学生的总成绩输入到一个全局数组当中,方便按成绩排序Avr[d++]=b; //将个学生的平均分输入到一个全局数组中存放n++;if(head->next==NULL){head=(StudentNode *)malloc(LEN);head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2->next=p1;}p1->next=NULL;save();//保存到文件}//******************************************显示链表中所有记录学生信息******************************************void print_stu() //学生信息浏览{StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}for(p=head->next;p!=NULL;p=p->next) //读出信息{PF("**************************************查看链表中所有记录学生信息**************************************\n");PF("\t学生学号:\t%s\n",p->IDNumber);PF("\t学生姓:\t%s\n",p->FamilyName);PF("\t学生名:\t%s\n",p->GivenName);PF("\t学生性别:\t%d\n",p->sex);PF("\t学生出生年:\t%d\n",p->BirthYear);PF("\t学生出生月:\t%d\n",p->BirthMonth);PF("\t学生出生日:\t%d\n",p->BirthDay);PF("\t学生英语成绩:\t%f\n",p->score0);PF("\t学生数学成绩:\t%f\n",p->score1);PF("\t学生C语言成绩:\t%f\n",p->score2);PF("\t学生马哲成绩:\t%f\n",p->score3);PF("\t学生总成绩:\t%f\n",p->sum);PF("\t学生平均成绩:\t%f\n",p->average);PF("\n");} //输出信息PF("\t各个学生总分分别为:");for(n=0;n<c;n++)PF("%f\t",Sum[n]);PF("\n");PF("\t各个学生平均分分别为:");for(n=0;n<d;n++)PF("%f\t",Avr[n]);}//******************************************按照学生姓查找记录******************************************void search_name() //按照学生姓查找记录{int i=0;StudentNode *p=NULL;char FamilyName[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("输入学生姓:");scanf("%s", FamilyName);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->FamilyName, FamilyName)){PF("\t\t您查找的学生有:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别:\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");i=1;}} //输出信息if(i!=1){PF("无该姓氏学生信息!请查证:"); } //没找到信息时的处理}//******************************************按照学生学号信息查找******************************************void search_NO() //学生学号信息查找{int i=0;StudentNode *p=NULL;char IDNumber[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("请输入学生学号:");scanf("%s",IDNumber);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->IDNumber,IDNumber)){PF("\t\t您查找的学生是:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别:\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");i=1;}} //输出信息if(!i){PF("无该生信息!请查证:"); } //没找到信息时的处理}//******************************************按照学生班级统计并输出总成绩******************************************void search_clas() //学生学号信息查找{int i=0,j=0;StudentNode *p=NULL;char a[6],b[6];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("请输入学生班级:");scanf("%s",a);for(p=head->next;p!=NULL;p=p->next) //读出信息{for(j=0;j<6;j++)b[j]=p->IDNumber[j];if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3]&&a[4]==b[4]&&a[5]==b[5]) {PF("\t\t您查找的班级学生有:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别:\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");i=1;}} //输出信息if(!i){PF("无该班级信息!请查证:"); } //没找到信息时的处理}//******************************************修改学生信息******************************************void revise_stu(){int y,j,k=0,m=0;int i=0;float a,b;y=time();StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}char IDNumber[20];PF("请输入学生的学号:\t");scanf("%s",IDNumber);for(p=head->next;p!=NULL;p=p->next){if(!strcmp(p->IDNumber,IDNumber)) //验证信息是否正确{PF("\t\t你要修改的学生是:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别(0代表女,1代表男):\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");//输出要修改信息i=1;for(k=0;k<c;k++) //记录被修改学生总分在数组中的位子{ if(p->sum==Sum[k])break;}for(m=0;m<d;m++) //记录被修改学生平均分在数组中的位子{ if(p->average==Avr[m])break;}English=English-p->score0; //修改学生英语总分Math=Math-p->score1; //修改学生数学总分C=C-p->score2; //修改学生C语言总分Mazhe=Mazhe-p->score3; //修改学生马哲总分PF("\t\t您修改学号为%s的学生:\n",IDNumber);PF("\n");strcpy(p->IDNumber,IDNumber);PF("\t\t输入修改学生姓:\t");scanf("%s",p->FamilyName);PF("\t\t输入修改学生名:\t");scanf("%s",p->GivenName);PF("\t\t输入修改学生性别(0代表女,1代表男):\t");scanf("%d",&p->sex);for(j=0;;j++) //判断输入年份是否合理,假设人年龄在0-100岁之间为正常{PF("\t\t输入学生出生年:\t");scanf("%d",&p->BirthYear); //出生年if((y-p->BirthYear)>100||(p->BirthYear>y))PF("\t\t年份输入错误不符合要求,请重新输入出生年份:\t");elsebreak;}for(j=0;;j++) //判断输入月份是否合理{PF("\t\t输入学生出生月:\t");scanf("%d",&p->BirthMonth); //出生月if(p->BirthMonth<1||p->BirthMonth>12)PF("\t\t月份输入错误不符合要求,请重新输入出生月份:\t");elsebreak;}for(j=0;;j++) // 判断输入出生日是否合理{ PF("\t\t输入学生出生日:\t");scanf("%d",&p->BirthDay); //出生日if(p->BirthDay<1||p->BirthDay>31)PF("\t\t出生日输入错误不符合要求,请重新输入出生日:\t");elsebreak;}PF("\t\t输入学生的外语成绩:\t");scanf("%f",&p->score0); //修改的各科成绩PF("\t\t输入学生的数学成绩:\t");scanf("%f",&p->score1);PF("\t\t输入学生的C语言成绩:\t");scanf("%f",&p->score2);PF("\t\t输入学生的马哲成绩:\t");scanf("%f",&p->score3);a=p->score0+p->score1+p->score2+p->score3; //求该生的各科总成绩b=(a/4); //求该生的平均成绩p->sum=a;p->average=b;Sum[k]=p->sum; //将新的总分修改原总分Avr[m]=p->average; //将新的平均分修改原平均分English=English+p->score0; //修改学生英语总分Math=Math+p->score1; //修改学生数学总分C=C+p->score2; //修改学生C语言总分Mazhe=Mazhe+p->score3; //修改学生马哲总分PF("\n"); //输入修改信息save();}}if(!i){PF("无该生信息!请查证:");} /*没找到信息时的处理*/}//******************************************删除学生信息******************************************void del_stu(){ int i=0;StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}else{char IDNumber[20];PF("请输入学生的学号:\t");scanf("%s",IDNumber);for(p=head;p!=NULL;p=p->next){if(!strcmp(p->next->IDNumber,IDNumber)) //验证信息是否正确{ PF("%s\n",IDNumber);PF("\t\t您要删除的学生是:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->next->IDNumber);PF("\t\t学生姓:\t%s\n",p->next->FamilyName);PF("\t\t学生名:\t%s\n",p->next->GivenName);PF("\t\t学生性别:\t%d\n",p->next->sex);PF("\t\t学生出生年:\t%d\n",p->next->BirthYear);PF("\t\t学生出生月:\t%d\n",p->next->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->next->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->next->score0);PF("\t\t学生数学成绩:\t%f\n",p->next->score1);PF("\t\t学生C语言成绩:\t%f\n",p->next->score2);PF("\t\t学生马哲成绩:\t%f\n",p->next->score3);PF("\t\t学生总成绩:\t%f\n",p->next->sum);PF("\t\t学生平均成绩:\t%f\n",p->next->average);PF("\n"); //输出要删除的信息English=English-(p->next->score0); //修改学生英语总分Math=Math-(p->score1); //修改学生数学总分C=C-(p->next->score2); //修改学生C语言总分Mazhe=Mazhe-(p->next->score3); //修改学生马哲总分for(n=0;n<c;n++) //删除记录总分数组中该生记录,并且后面数据往前移一位{if(p->next->sum==Sum[n])for(j=n;j<c;j++)Sum[j]=Sum[j+1];break;}c--; //数据总数减一for(n=0;n<d;n++) //删除记录总平均分组中该生记录,并且后面数据往前移一位{if(p->next->average==Avr[n])for(j=n;j<d;j++)Avr[j]=Avr[j+1];break;}d--; //数据总数减一i=1;if(p->next->next){printf("第一个\n");p->next=p->next->next;}elsep->next=NULL;n--;save();return;} //if的括号} //大for循环的if(!i){PF("无该生信息!请查证:"); //没找到信息时的处理return;}} //else的括号save();}//******************************************将链表中记录保存到文件中******************************************void save(){printf("**************************************保存信息并结束**************************************\n");StudentNode *p=NULL;FILE *fp;char *filename="fname.txt";if((fp=fopen("fname.txt","w"))==NULL) //出错检测{printf("\n打不开文件!\n");return;}if(head->next==NULL){printf("\n信息为空!\n");return;}elsep=head->next;while(p!=NULL){fprintf(fp,"%s %s %s %d %d %d %d %f %f %f %f %f %f \n",p->IDNumber,p->FamilyName,p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->score0,p->score1,p->score2,p->score3,p->su m,p->average);//存入文件p=p->next;}printf("保存完毕!\n");fclose(fp);}//计算所有学生以及各科总分和均分,可评估学校教学质量void jisuan(){float sum=0,avr;int j;for(j=0;j<c;j++)sum=sum+Sum[j];avr=sum/c;PF("全部学生总成绩为:%f",sum);PF("\n");PF("\n");PF("全部学生平均成绩为:%f",avr);PF("\n");PF("\n");PF("所有学生英语成绩总和为:%f",English);PF("\n");PF("\n");PF("全校学生英语平均成绩为:%f",English/c);PF("\n");PF("\n");PF("所有学生数学成绩总和为:%f",Math);PF("\n");PF("\n");PF("全校学生数学平均成绩为:%f",Math/c);PF("\n");PF("\n");PF("所有学生C语言成绩总和为:%f",C);PF("\n");PF("\n");PF("全校学生C语言平均成绩为:%f",C/c);PF("\n");PF("\n");PF("所有学生马哲成绩总和为:%f",Mazhe);PF("\n");PF("\n");PF("全校学生马哲平均成绩为:%f",Mazhe/c);PF("\n");}//******************************************从文件中读出所有学生记录信息******************************************void Loadf() //读出学生信息{StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}for(p=head->next;p!=NULL;p=p->next) //读出信息{PF("**************************************读出链表中所有记录学生信息**************************************\n");PF("\t学生学号:\t%s\n",p->IDNumber);PF("\t学生姓:\t%s\n",p->FamilyName);PF("\t学生名:\t%s\n",p->GivenName);PF("\t学生性别:\t%d\n",p->sex);PF("\t学生出生年:\t%d\n",p->BirthYear);PF("\t学生出生月:\t%d\n",p->BirthMonth);PF("\t学生出生日:\t%d\n",p->BirthDay);PF("\t学生英语成绩:\t%f\n",p->score0);PF("\t学生数学成绩:\t%f\n",p->score1);PF("\t学生C语言成绩:\t%f\n",p->score2);PF("\t学生马哲成绩:\t%f\n",p->score3);PF("\t学生总成绩:\t%f\n",p->sum);PF("\t学生平均成绩:\t%f\n",p->average);PF("\n");} //输出信息PF("\t各个学生总分分别为:");for(n=0;n<c;n++)PF("%f\t",Sum[n]);PF("\n");PF("\t各个学生平均分分别为:");for(n=0;n<d;n++)PF("%f\t",Avr[n]);}//******************************************插入学生信息******************************************void insert_stu() //插入学生信息{float a,b; //a,b分别用来存放该生的各科总成绩和平均成绩int y,j;y=time();n=0;StudentNode *p1=NULL,*p2=NULL;p1=( StudentNode *)malloc(sizeof(StudentNode));PF("\n**************************************插入学生信息**************************************\n"); //输入学生信息PF("\t\t输入插入学生学号:\t");scanf("%s",p1->IDNumber); //学号PF("\t\t输入插入学生的姓:\t");scanf("%s",p1->FamilyName); //姓PF("\t\t输入插入学生的名:\t");scanf("%s",p1->GivenName); //名PF("\t\t输入插入学生性别(0代表女,1代表男):\t");scanf("%d",&p1->sex); //性别for(j=0;;j++) //判断输入年份是否合理,假设人年龄在0-100岁之间为正常{PF("\t\t输入插入学生出生年:\t");scanf("%d",&p1->BirthYear); //出生年if((y-p1->BirthYear)>100||(p1->BirthYear>y))PF("\t\t年份输入错误不符合要求,请重新输入出生年份:\t");elsebreak;}for(j=0;;j++) //判断输入月份是否合理{PF("\t\t输入插入学生出生月:\t");scanf("%d",&p1->BirthMonth); //出生月if(p1->BirthMonth<1||p1->BirthMonth>12)PF("\t\t月份输入错误不符合要求,请重新输入出生月份:\t");elsebreak;}for(j=0;;j++) // 判断输入出生日是否合理{ PF("\t\t输入插入学生出生日:\t");scanf("%d",&p1->BirthDay); //出生日if(p1->BirthDay<1||p1->BirthDay>31)PF("\t\t出生日输入错误不符合要求,请重新输入出生日:\t");elsebreak;}PF("\t\t输入插入学生的外语成绩:\t");scanf("%f",&p1->score0); //各科成绩PF("\t\t输入插入学生的数学成绩:\t");scanf("%f",&p1->score1);PF("\t\t输入插入学生的C语言成绩:\t");scanf("%f",&p1->score2);PF("\t\t输入插入学生的马哲成绩:\t");scanf("%f",&p1->score3);a=p1->score0+p1->score1+p1->score2+p1->score3; //求该生的各科总成绩b=(a/4); //求该生的平均成绩p1->sum=a;p1->average=b;English=English+p1->score0; //求学生英语总分Math=Math+p1->score1; //求学生数学总分C=C+p1->score2; //求学生C语言总分Mazhe=Mazhe+p1->score3; //求学生马哲总分Sum[c++]=a; //将各学生的总成绩输入到一个全局数组当中,方便按成绩排序Avr[d++]=b; //将各学生的平均分输入到一个全局数组当中,方便按平均成绩阶段输出n++;if(head->next==NULL){head=(StudentNode *)malloc(LEN);head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2->next=p1;}p1->next=NULL;save();//保存到文件}//******************************************学生成绩排名及基本数据的统计计算******************************************void sort(float x[],int n) //数组排序函数{int i,j,k;float t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;if(k!=i){t=x[i];x[i]=x[k];x[k]=t;}}}void search_allscore() //按学生总分查找,用来输出排名。