学生成绩管理系统(含源码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生成绩管理系统
该系统是用C实现的控制台程序,用文件保存数据。
程序遵循模块化的设计思想,尽量做到高类聚,低耦合的特性,已实现一些基本功能,读者可根据自己的需要进行功能添加或删除,只需另写有关函数即可。
由于笔者水平有限,读者可自行优化。
本程序紧供大家学习参考。
复制代码用vc6.0或devc即可直接编译运行,该程序主要函数:
void menu(); //主菜单函数用于输出主菜单界面
void introduce();//系统使用介绍函数
void input(Link);//输入函数用于输入一条记录
void del(Link);//删除记录函数
void search(Link);//查询函数
void modify(Link);//修改函数
void insert(Link);//插入函数
void tongji(Link);//统计函数
void sort(Link);//排序函数
void display(Link);//显示记录函数
void save(Link);//保存函数
运行结果:
主界面
选择显示记录功能后
选择排序后
删除记录后
//文件stuscore.h
#include<stdio.h>
#include<string.h>
#include<windows.h>
#define NULL 0
short saveflag=0;
struct student
{
char num[11]; //学号
char name[15];//姓名
short chgrade;//语文成绩
short mgrade;//数学成绩
short egrade;//英语成绩
short total;//总分
float average;//平均分
int mingci;//名次
};
typedef struct node
{
struct student data; //数据域
struct node *next;//指针域
}Node,*Link;
//main文件
#include"stuscore.h"
void menu(); //主菜单函数用于输出主菜单界面
void introduce();
void input(Link);
void del(Link);
void search(Link);
void modify(Link);
void insert(Link);
void tongji(Link);
void sort(Link);
void display(Link);
void save(Link);//保存函数
void main()
{
short choice=30;
char ch;
Link l;
FILE *fp;
Node *p,*r;
fp=fopen("E:\\C_count\\studentscore\\stuscore","ab+");
if(!fp){printf("allocate memory filure1!");exit(1);}
l=(Node *)malloc(sizeof(Node));
if(l==NULL){printf("allocate memory filure2!");exit(1);}
l->next=NULL;
r=l;
while(!feof(fp))
{
p=(Link)malloc(sizeof(Node));
if(!p){printf("allocate memory filure3!");exit(1);}
if(fread(p,sizeof(Node),1,fp)==1)
{
r->next=p;
p->next=NULL;
r=p;
}
}
fclose(fp);
do{
menu();
printf("Please enter your choice(0-9): ");
scanf("%d",&choice);
if(choice==9)
{
if(saveflag==1)
{
printf("whether save the modified record to file?(y/n): ");getchar();
scanf("%c",&ch);
if(ch=='Y'||ch=='y')save(l);
}
printf("thank you for useness!\n");
break;
}
switch(choice)
{
case 0:introduce();break; //调用系统使用说明函数
case 1:input(l);break; //调用输入函数
case 2:del(l);break; //调用删除函数
case 3:search(l);break;//调用查询函数
case 4:modify(l);break;//调用修改函数
case 5:insert(l);break;//调用插入函数
case 6:tongji(l);break;//调用统计函数
case 7:sort(l);break;//调用排序函数
case 8:display(l);break;//调用输出函数
default:printf("error!\n\n\n");
}
}while(1);
}
void menu()
{
printf("===========================欢迎使用学生成绩管理系统============================\n");
printf(" 0 system introduce 1 input record\n");
printf(" 2 delete record 3 search record\n");
printf(" 4 modiry record 5 insert record\n");
printf(" 6 count record 7 sort record\n");
printf(" 8 display record 9 quit system\n");
}
void introduce()
{
system("cls");
printf("欢迎使用学生成绩管理系统,在功能选择界面您可以输入数字0至9其中任一一个数字进行功能选择。
\n\n\n");
}
void input(Link l)//每次添加一条记录
{
Link p,r,s;
char num[11],name[15];
short chgrade,mgrade,egrade;
p=l;s=l;
while(p->next){p=p->next;}
r=(Node *)malloc(sizeof(Node));
if(!r){printf("allocate memory filure!");return;}
system("cls");
printf("请输入学号: ");
scanf("%s",num);
if(l->next!=NULL)
{
while(s->next)
{
s=s->next;
if(!strcmp((s->data).num,num))
{
printf("输入的学号已经存在,请重新输入: ");
scanf("%s",num);
s=l;
}
}
}
strcpy((r->data).num,num);
printf("请输入姓名: "); scanf("%s",name); strcpy((r->data).name,name);
printf("请输入语文成绩: "); scanf("%d",&chgrade); (r->data).chgrade=chgrade;
printf("请输入数学成绩: "); scanf("%d",&mgrade); (r->data).mgrade=mgrade;
printf("请输入英语成绩: "); scanf("%d",&egrade); (r->data).egrade=egrade;
(r->data).total=chgrade+mgrade+egrade;
(r->data).average=(float)(chgrade+mgrade+egrade)/3;
p->next=r;r->next=NULL;
saveflag=1;
printf("一个学生信息记录已经添加完成\n\n\n");
}
void del(Link l)
{
Link p,r;
char num[11];
system("cls");
p=r=l;
printf("请输入要删除记录的学号: ");
scanf("%s",num);
while(p->next)
{
p=p->next;
if(strcmp((p->data).num,num)==0){break;}
r=r->next;
}
if(p!=r)
{
if((l->next)->next==NULL)l->next=NULL;
if((p->next)==NULL)r->next=NULL;
r->next=p->next;
printf("记录%s %s %d %d %d %d %.2f已删除\n\n\n",(p->data).num,(p->data).name,(p->data).chgrade,(p->data).mgrade,(p->data).egrade,(p-> data).total,(p->data).average);
saveflag=1;
}
else printf("无此学号的记录\n\n\n");
}
void search(Link l)
{
Link p;
char num[11];
short temp=0;
p=l;
system("cls");
printf("请输入要查询记录的学号: ");
scanf("%s",num);
system("cls");
if(p->next==NULL){printf("系统无记录\n\n\n");return;}
while(p->next)
{
p=p->next;
if(!strcmp((p->data).num,num))
{
printf("学号姓名语文数学英语总分平均分\n");
printf("%s %s %d %d %d %d
%.2f\n\n\n",(p->data).num,(p->data).name,(p->data).chgrade,(p->data).mgrade,(p->data).e grade,(p->data).total,(p->data).average);
temp=1;
break;
}
}
if(temp==0)printf("不存在学号为%s的记录\n\n\n",num);
}
void modify(Link l)
{
Link p,r;
char num[11],tem[11];
char name[15];
short chgrade=0;
short mgrade=0;
short egrade=0;
short temp=0;
p=l;r=l;
system("cls");
printf("请输入要修改记录的学号: ");
scanf("%s",num);strcpy(tem,num);
system("cls");
while(p->next)
{
p=p->next;
if(!strcmp((p->data).num,num))
{
temp=1;
printf("学号姓名语文数学英语总分平均分\n");
printf("%s %s %d %d %d %d
%.2f\n\n\n",(p->data).num,(p->data).name,(p->data).chgrade,(p->data).mgrade,(p->data).e grade,(p->data).total,(p->data).average);
break;
}
}
if(temp==1)
{
printf("请重新输入该记录的学号、姓名、语文、数学、英语成绩\n");
printf("请输入修改后的学号: ");
scanf("%s",num);
while(r->next)
{
r=r->next;
if(!strcmp((r->data).num,num)){if(strcmp(num,tem)==0)break;r=l;printf("该学号已存在,请重新输入: ");scanf("%s",num);}
}
strcpy((p->data).num,num);
printf("请输入修改后的姓名: ");scanf("%s",name);strcpy((p->data).name,name);
printf("请输入修改后的语文成绩: ");scanf("%d",&chgrade);(p->data).chgrade=chgrade;
printf("请输入修改后的数学成绩: ");scanf("%d",&mgrade);(p->data).mgrade=mgrade;
printf("请输入修改后的英语成绩: ");scanf("%d",&egrade);(p->data).egrade=egrade;
(p->data).total=chgrade+mgrade+egrade;
(p->data).average=(float)(chgrade+mgrade+egrade)/3;
system("cls");
printf("学号为%s的记录已修改为: \n",tem);
printf("%s %s %d %d %d %d
%.2f\n\n\n",(p->data).num,(p->data).name,(p->data).chgrade,(p->data).mgrade,(p->data).e grade,(p->data).total,(p->data).average);
saveflag=1;
}
if(temp==0)printf("不存在学号为%s的记录\n\n\n",num);
}
void insert(Link l)
{
input(l);
}
void tongji(Link l)
{
Link p;
int tcount=0;
int chcount=0;
int mcount=0;
int ecount=0;
p=l;
while(p->next)
{
p=p->next;
if((p->data).chgrade<60)chcount++;
if((p->data).mgrade<60)mcount++;
if((p->data).egrade<60)ecount++;
tcount++;
}
system("cls");
printf("系统共有%d条学生成绩记录,其中语文不及格人数为%d人,数学不及格人数为%d人,英语不及格人数为%d人\n\n\n\n",tcount,chcount,mcount,ecount);
}
void sort(Link l)
{
Link r,t1,p,s;
char t[11];
char k[15];
short temp;
float femp;
p=l;t1=l;
if((p->next)==NULL){printf("系统无记录\n\n\n\n");return;}
p=p->next;
if((p->next)==NULL){display(l);return;}
p=l;
while(p->next)
{
p=p->next;
r=p;s=p;
while(r->next)
{
r=r->next;
if((s->data).total<(r->data).total)
{
temp=(r->data).chgrade;(r->data).chgrade=(s->data).chgrade;(s->data).chgrade=temp;
temp=(r->data).mgrade;(r->data).mgrade=(s->data).mgrade;(s->data).mgrade=temp;
temp=(r->data).egrade;(r->data).egrade=(s->data).egrade;(s->data).egrade=temp;
temp=(r->data).total;(r->data).total=(s->data).total;(s->data).total=temp;
femp=(r->data).average;(r->data).average=(s->data).average;(s->data).average=femp;
strcpy(t,(r->data).num);strcpy((r->data).num,(s->data).num);strcpy((s->data).num,t);
strcpy(k,(r->data).name);strcpy((r->data).name,(s->data).name);strcpy((s->data).name,k);
}
}
t1->next=s;
t1=t1->next;
}
t1->next=NULL;
display(l);
}
void display(Link l)
{
Link p;
system("cls");
p=l;
if((p->next)==NULL){printf("无记录\n\n\n");return;}
printf("学号姓名语文数学英语总分平均分\n");
while((p->next)!=NULL){p=p->next;printf("%s %s %d %d %d %d
%.2f\n",(p->data).num,(p->data).name,(p->data).chgrade,(p->data).mgrade,(p->data).egrad e,(p->data).total,(p->data).average);}
printf("\n\n\n");
}
void save(Link l)
{
Link p;
FILE *fp;
fp=fopen("E:\\C_count\\studentscore\\stuscore","wb");
if(!fp){printf("cannot open file!\n");return;}
system("cls");
p=l;
while(p->next)
{
p=p->next;
if(fwrite(p,sizeof(Node),1,fp)!=1){printf("file wirte error!\n");return;} }
}。