学生成绩管理系统c
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学生成绩管理系统c相关的知识,希望对你有一定的参考价值。
题目:学生成绩管理系统
功能:学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。系统
要求实现以下功能:
1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);
2、信息查询:输入学号,查询学生各门课程的成绩,并显示。
3、排序:按各门课程的成绩平均分进行排序,并显示。
4、信息删除与修改——输入学号,删除该学生的成绩信息。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。
2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。
3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。
要求:1、用C语言实现程序设计;
2、利用结构体数组实现学生信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:
1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、
小结等。
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct book
char number[21];
char shuming[30];
int shuliang;
int jiage;
char zhuanye[20];
char zuozhe[26];
char chubanshe[20];
char beizhu[100];
struct book *next;
;
struct book *creat() /*创建链表*/
struct book *p,*head,*end;
head=end=p=(struct book *)malloc(sizeof(struct book));
printf("输入教材编号为0结束输入,每项信息都必须输入内容。\\n");
do
printf("\\n教材编号:");
gets(p->number);
if(strcmp(p->number,"0")==0) end->next=NULL; return head;
end=p;
printf("\\n教材名称:");
gets(p->shuming);
printf("\\n教材数量:");
scanf("%d",&p->shuliang);
printf("\\n教材价格:");
scanf("%d",&p->jiage);
getchar();
printf("\\n教材专业:");
gets(p->zhuanye);
printf("\\n教材作者:");
gets(p->zuozhe);
printf("\\n教材出版社:");
gets(p->chubanshe);
printf("\\n备注:");
gets(p->beizhu);
p=(struct book *)malloc(sizeof(struct book));
end->next=p;
while(1);
void save(struct book *head) /*保存链表*/
FILE *fp;
struct book *p;
char filename[30];
int ch;
printf("请输入“文件名.后缀”:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))!=NULL)
printf("\\n该文件已存在,是否覆盖?1,是 2,否");
scanf("%d",&ch);
if(ch!=1)
return;
if((fp=fopen(filename,"w"))==NULL) printf("\\n文件保存失败");getchar();return;
p=head;
do
fprintf(fp,"\\n%s",p->number);
fprintf(fp,"\\n%s",p->shuming);;
fprintf(fp,"\\n%d",p->shuliang);
fprintf(fp,"\\n%d",p->jiage);
fprintf(fp,"\\n%s",p->zhuanye);
fprintf(fp,"\\n%s",p->zuozhe);
fprintf(fp,"\\n%s",p->chubanshe);
fprintf(fp,"\\n%s",p->beizhu);
p=p->next;
while(p!=NULL);
fprintf(fp," over");
printf("\\n成功保存");
getchar();
getchar();
fclose(fp);
void print(struct book *head) /*输出链表*/
struct book *p;
p=head;
if(p==NULL) printf("未打开任何文件,无法显示"); getch();return;
do
printf("\\n\\n教材编号:%s",p->number);
printf("\\n教材名称:%s",p->shuming);;
printf("\\n数量:%d",p->shuliang);
printf("\\n价格:%d",p->jiage);
printf("\\n专业:%s",p->zhuanye);
printf("\\n作者:%s",p->zuozhe);
printf("\\n出版社:%s",p->chubanshe);
printf("\\n备注:%s",p->beizhu);
p=p->next;
while(p!=NULL);
struct book *openfile() /*打开文件*/
struct book *p,*f,*head;
FILE *fp;
char filename[20];
printf("\\n请输入路径,文件名,和后缀):");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL) printf("\\n文件找不到,请检查是否有该文件和路径是否正确");getchar();return NULL;
head=f=p=(struct book *)malloc(sizeof(struct book));
fscanf(fp,"%s%s%d%d%s%s%s%s",p->number,p->shuming,&p->shuliang,&p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
while(!feof(fp))
p=(struct book *)malloc(sizeof(struct book));
f->next=p;
fscanf(fp,"%s%s%d%d%s%s%s%s",p->number,p->shuming,&p->shuliang,&p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
if(strcmp(p->number,"over")==0) f->next=NULL; printf("\\n文件打开成功,可以显示此信息");getchar(); return head;
f=p;
return head;
void namesort(struct book *head) /*按教材名称排序*/
struct book *p,*t,*f,*h;
char ch[20];
int i;
h=t=f=p=head;
if(head==NULL) printf("未打开任何文件");getchar();return; ;
f=p->next;
for(p=head;p->next!=NULL;p=p->next)
for(t=head,f=t->next;t->next!=NULL;f=f->next,t=t->next)
if(strcmp(t->shuming,f->shuming)>0)
strcpy(ch,t->number );
strcpy(t->number,f->number);
strcpy(f->number,ch);
strcpy(ch,t->shuming );
strcpy(t->shuming,f->shuming);
strcpy(f->shuming,ch);
i=t->shuliang ;
t->shuliang=f->shuliang;
f->shuliang=i;
i=t->jiage ;
t->jiage=f->jiage;
f->jiage=i;
strcpy(ch,t->zhuanye);
strcpy(t->zhuanye,f->zhuanye);
strcpy(f->zhuanye,ch);
strcpy(ch,t->zuozhe);
strcpy(t->zuozhe,f->zuozhe);
strcpy(f->zuozhe,ch);
strcpy(ch,t->chubanshe);
strcpy(t->chubanshe,f->chubanshe);
strcpy(f->chubanshe,ch);
strcpy(ch,t->beizhu);
strcpy(t->beizhu,f->beizhu);
strcpy(f->beizhu,ch);
print(h);
void chubanshesort(struct book *head) /*按出版社排序*/
struct book *p,*t,*f,*h;
char ch[20];
int i;
h=t=f=p=head;
if(head==NULL) printf("未打开任何文件");getchar();return;
f=p->next;
for(p=head;p->next!=NULL;p=p->next)
for(t=head,f=t->next;t->next!=NULL;f=f->next,t=t->next)
if(strcmp(t->chubanshe,f->chubanshe)>0)
strcpy(ch,t->number );
strcpy(t->number,f->number);
strcpy(f->number,ch);
strcpy(ch,t->shuming );
strcpy(t->shuming,f->shuming);
strcpy(f->shuming,ch);
i=t->shuliang ;
t->shuliang=f->shuliang;
f->shuliang=i;
i=t->jiage ;
t->jiage=f->jiage;
f->jiage=i;
strcpy(ch,t->zhuanye);
strcpy(t->zhuanye,f->zhuanye);
strcpy(f->zhuanye,ch);
strcpy(ch,t->zuozhe);
strcpy(t->zuozhe,f->zuozhe);
strcpy(f->zuozhe,ch);
strcpy(ch,t->chubanshe);
strcpy(t->chubanshe,f->chubanshe);
strcpy(f->chubanshe,ch);
strcpy(ch,t->beizhu);
strcpy(t->beizhu,f->beizhu);
strcpy(f->beizhu,ch);
print(h);
void shumingsearch(struct book *head) /*按教材名称查找*/
struct book *p;
char name[20];
int c;
if(head==NULL) printf("未打开任何文件");getchar();return;
printf("1,查找专业 2,查找教材名称:");
scanf("%d",&c);
getchar();
if(c==2)
printf("请输入要查找的教材名称:");
else printf("请输入要查找的专业:");
gets(name);
p=head;
do if(c==2)
if(strcmp(p->shuming,name)==0)
printf("教材编号:%s\\n教材名称:%s\\n数量:%d\\n价格:%d\\n专业:%s\\n作者:%s\\n出版社:%s\\n备注:%s\\n",p->number,p->shuming,p->shuliang,p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
if(c==1)
if(strcmp(p->zhuanye,name)==0)
printf("教材编号:%s\\n教材名称:%s\\n数量:%d\\n价格:%d\\n专业:%s\\n作者:%s\\n出版社:%s\\n备注:%s\\n",p->number,p->shuming,p->shuliang,p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
p=p->next;
while(p!=NULL);
printf("查找完成");
return;
struct book *add(struct book *head) /*增加记录*/
struct book *p,*e,*f,*h;
if(head==NULL) printf("未打开任何文件");getchar(); return NULL;
h=f=e=head;
p=(struct book *)malloc(sizeof(struct book));
printf("\\n教材编号:");
gets(p->number);
printf("\\n教材名称:");
gets(p->shuming);
printf("\\n数量:");
scanf("%d",&p->shuliang);
printf("\\n价格:");
scanf("%d",&p->jiage);
getchar();
printf("\\n专业:");
gets(p->zhuanye);
printf("\\n作者:");
gets(p->zuozhe);
printf("\\n出版社:");
gets(p->chubanshe);
printf("\\n备注:");
gets(p->beizhu);
if(strcmp(f->number,p->number)>0) p->next=f;h=p;printf("\\n添加成功");return h;
if(f->next==NULL) f->next=p;p->next=NULL;printf("\\n添加成功");return h;
do
if(f->next!=NULL)
if(strcmp(f->number,p->number)>0)
e->next=p;p->next=f;printf("\\n添加成功");return h;
if(f->next==NULL)
f->next=p;
p->next=NULL;
printf("\\n添加成功");
return h;
f=f->next;
e=e->next;
while(1);
struct book *delet(struct book *head) /*删除记录*/
struct book *p,*e;
char num[20];
if(head==NULL) printf("未打开任何文件");getchar();return NULL;
printf("请输入要删除的教材编号:");
scanf("%s",num);
p=e=head;
if(strcmp(p->number,num)==0) head=head->next; print(head);return head;
else p=p->next;
do
if(strcmp(p->number,num)==0)
if(p->next!=NULL)
e->next=p->next;
if(p->next==NULL) e->next=NULL;
print(head);
return head;
p=p->next;
e=e->next;
while(p!=NULL);
printf("搜索完毕,未找到该记录");
return head;
struct book *change(struct book *head) /*修改记录*/
struct book *p;
char num[20];
if(head==NULL) printf("未打开任何文件");getchar();return NULL;
printf("请输入要修改的教材编号:");
scanf("%s",num);
getchar();
p=head;
do
if(strcmp(p->number,num)==0)
printf("教材编号:%s\\n教材名称:%s\\n数量:%d\\n价格:%d\\n专业:%s\\n作者:%s\\n出版社:%s\\n备注:%s\\n",p->number,p->shuming,p->shuliang,p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
printf("\\n教材编号:");
gets(p->number);
printf("\\n教材名称:");
gets(p->shuming);
printf("\\n数量:");
scanf("%d",&p->shuliang);
printf("\\n价格:");
scanf("%d",&p->jiage);
getchar();
printf("\\n专业:");
gets(p->zhuanye);
printf("\\n作者:");
gets(p->zuozhe);
printf("\\n出版社:");
gets(p->chubanshe);
printf("\\n备注:");
gets(p->beizhu);
printf("修改成功");
return head;
p=p->next;
while(p!=NULL);
printf("未找到要修改的记录");
return head;
int mima()
FILE *fp;
char mima1[20],mima2[20];
if((fp=fopen("mima","r"))==NULL)
printf("尚未设置密码请输入:");
scanf("%s",mima1);
printf("请再次输入密码:");
scanf("%s",mima2);
if(strcmp(mima1,mima2)!=0) printf("两次密码不一样");return 0;
else
fp=fopen("mima","w");
fprintf(fp,"%s",mima1);
printf("密码设置成功");
return 1;
printf("请输入初始化密码:");
scanf("%s",mima1);
fscanf(fp,"%s",mima2);
if(strcmp(mima1,mima2)==0)
printf("密码正确");
printf("请输入要删除的文件名:");
scanf("%s",mima1);
if(remove(mima1)==0)
printf("删除成功");
getchar();
return 1;
else
printf("删除失败,请检查是否存在该文件或路径是否正确");
getchar();
return 0;
else
printf("密码错误");
getchar();
return 0;
void main()
struct book *head=NULL;
char i;
printf(" 88888888888 \\n");
printf(" d88888888888b \\n");
printf(" d88888 88888b \\n");
printf(" d88P 88b \\n");
printf(" 888\' `88b \\n");
printf(" 88P Y88 \\n");
printf(" 88 88\\n");
printf(" 88 88\\n");
printf(" 88 88\\n");
printf(" 88 88\\n");
printf(" 88 88\\n");
printf(" 88 ,aa. ,aa. 88 \\n");
printf(" 88 d88b d88b 88 \\n");
printf(" ,=88 Y88P Y88P 88=, \\n");
printf(" ,d88P\' `\' _aa_ `\' `Y88b, \\n");
printf(" 88P\' (8888) `Y88 ad88888b \\n");
printf(" 88 ~^^~ 88 d88Y Y8b\\n");
printf(" Yb._ _.d8 d8Y 88\\n");
printf(" d88888888ba888=,. .,=8888 d88 88 \\n");
printf(" ★☆88P Y88~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~★☆\\n");
printf(" ★☆ 88 88 ★☆\\n");
printf(" ★☆88 88 欢迎使用本教材系统,按任意键进入系统 ★☆\\n");
printf(" ★☆ 8b,___,d8 ★☆\\n");
printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\\n");
getch();
system("cls");
do
printf(" ☆★☆★☆★ 教材管理系统 ☆★☆★☆★\\n");
printf("m--菜单 h--帮助");
printf("\\n请输入命令:");
i=getch();
if(i==\'h\')
printf("\\n1,录入教材信息的时候,每一个项目都必须输入相应的内容。\\n2,修改,增加,删除,查找记录前必须先打开一个文件,修改完后必须记得保存教材信息。\\n3,必须使用正确的路径打开文件,建议保存文件时候不用输入路径(此时是默认路径,即保存在程序目录下。)");
getch();
break;
if(i==\'m\')
break;
system("cls");
while(i!=\'m\'||i!=\'h\');
system("cls");
do
printf(" ☆★☆★☆★ 教材管理系统 ☆★☆★☆★\\n");
printf("┌————-———┐\\n");
printf("│1,录入教材信息│\\n│2,显示教材信息│\\n│3,打开一个记录│\\n│4,编辑一个记录│\\n│5,保存教材信息│\\n│6,查找记录 │\\n│s,初始化系统 │\\n│e,退出系统 │\\n");
printf("└———————-┘\\n");
printf("\\n请输入功能编号:");
i=getch();
system("cls");
switch(i)
case \'1\': head=creat();save(head);break;
case \'2\': print(head);break;
case \'3\': head=openfile();break;
case \'4\': system("cls");
printf("┌————-———┐\\n");
printf("│1,增加一个记录│\\n");
printf("│2,删除一个记录│\\n");
printf("│3,修改一个记录│\\n");
printf("└———————-┘\\n");
i=getch();
switch(i)
case \'1\':
head=add(head);break;
case \'2\':
head=delet(head);break;
case \'3\': head=change(head);break;
default: break;
break;
case \'5\': save(head);break;
case \'6\': shumingsearch(head);break;
case \'s\': mima();break;
case \'e\': exit(0);
default :break;
system("cls");
while(1);
我想这个程序包含了你那个成绩管理系统的全部要求,但我这个是教材管理系统我想改一下就可以了,具体如何改就要看楼主的天赋咯,呵呵。参考一下吧 参考技术A 楼主这分给的,只能是已经做过的顺便发给你,不可能专门做一个啊。呵呵
c语音程序设计—学生成绩管理系统
#include"stdio.h"#include "stdlib.h"
#include "string.h"
typedef struct
char num[15];
char name[8];
int score[4]; //数组成员0、1、2为三门成绩,3为平均成绩
messege;
typedef struct
messege student[100];
int len;
lis;
lis list;
void menu();
void input_mune(char num);
void input();
void sort_menu();
void sort(char order);
void browse();
void exchange(); //结构体message成员变量互换函数
void del_menu();
void del();
main()
list.len=0;
menu();
void menu()
char num='6';
while (num!='0')
system("cls"); //清屏
printf("\n\n");
printf(" 学生成绩管理 \n");
printf("\n\n");
printf(" **************************************************** \n");
printf("\n");
printf(" 1.添加记录 \n"); //添加记录不排序
printf("\n");
printf(" 2.排序记录 \n");
printf("\n");
printf(" 3.浏览记录 \n");
printf("\n");
printf(" 4.插入记录 \n");
printf("\n");
printf(" 5.删除指定记录 \n");
printf("\n");
printf(" 0.退出 \n");
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 请输入操作序号: ");
scanf("%s",&num);
if((num=='1')||(num=='4'))
input_mune(num);
else
if(num=='2')
sort_menu();
else
if(num=='3')
browse();
else
if(num=='5')
del_menu();
void input_mune(char num)
char n='2';
while (n!='0')
system("cls");
printf("\n\n");
printf(" 添加记录 \n");
printf("\n\n");
printf(" **************************************************** \n");
printf("\n");
printf(" 1.添加记录 \n");
printf("\n");
printf(" 0.返回主界面 \n");
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 请输入操作序号: ");
scanf("%s",&n);
if(n=='1')
if(list.len>=100)
printf(" 学生信息表已满,无法添加\n");
else
input();
if(num=='4')
sort('1');
printf(" 输入任意键回车添加信息,返回主界面请输入0: ");
scanf("%s",&n);
void input()
int i;
printf(" 输入学生学号: ");
scanf("%s",&list.student[list.len].num);
printf("\n");
printf(" 输入学生姓名: ");
scanf("%s",&list.student[list.len].name);
printf("\n");
for(i=0;i<3;i++)
printf(" 输入成绩%d: ",i+1);
scanf("%d",&list.student[list.len].score[i]);
list.student[list.len].score[3]=(list.student[list.len].score[0]+list.student[list.len].score[1]+list.student[list.len].score[2])/3;
printf(" 你输入的信息为:\n");
printf(" 学号:%s",list.student[list.len].num);
printf(" 姓名:%s",list.student[list.len].name);
printf(" 成绩:%d %d %d",list.student[list.len].score[0],list.student[list.len].score[1],list.student[list.len].score[2]);
printf(" 平均成绩:%d\n",list.student[list.len].score[3]);
list.len=list.len+1;
void sort_menu()
char n='3';
while(n!='0')
system("cls");
printf("\n\n");
printf(" 排序 \n");
printf("\n\n");
printf(" **************************************************** \n");
printf("\n");
if(list.len==0)
printf(" 0.返回主界面 \n");
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 记录为空,无法排序");
printf("\n\n");
printf(" 请输入操作序号: ");
scanf("%s",&n);
else
if(list.len==1)
printf(" 0.退出 \n");
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 只有一条记录,无需排序");
printf("\n\n");
printf(" 请输入操作序号: ");
scanf("%s",&n);
else
printf(" 1.升序 \n");
printf("\n");
printf(" 2.降序 \n");
printf("\n");
printf(" 0.退出 \n");
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 请输入操作序号: ");
scanf("%s",&n);
if((n=='1')||(n=='2'))
sort(n);
printf(" 排序完成,输入任意键回车添加信息,返回主界面请输入0: ");
scanf("%s",&n);
void sort(char order)
int i,j;
if(order=='1')
for(i=0;i<list.len-1;i++)
for(j=i+1;j<list.len;j++)
if(list.student[i].score[3]>list.student[j].score[3])
exchange(i,j);
else
if(order=='2')
for(i=0;i<list.len-1;i++)
for(j=i+1;j<list.len;j++)
if(list.student[i].score[3]<list.student[j].score[3])
exchange(i,j);
void exchange(int i,int j)
messege temp;
temp.score[0]=list.student[i].score[0];
temp.score[1]=list.student[i].score[1];
temp.score[2]=list.student[i].score[2];
temp.score[3]=list.student[i].score[3];
strcpy(temp.num,list.student[i].num);
strcpy(temp.name,list.student[i].name);
list.student[i].score[0]=list.student[j].score[0];
list.student[i].score[1]=list.student[j].score[1];
list.student[i].score[2]=list.student[j].score[2];
list.student[i].score[3]=list.student[j].score[3];
strcpy(list.student[i].num,list.student[j].num);
strcpy(list.student[i].name,list.student[j].name);
list.student[j].score[0]=temp.score[0];
list.student[j].score[1]=temp.score[1];
list.student[j].score[2]=temp.score[2];
list.student[j].score[3]=temp.score[3];
strcpy(list.student[j].num,temp.num);
strcpy(list.student[j].name,temp.name);
void browse()
int i;
char n='1';
while(n!='0')
system("cls");
printf("\n\n");
printf(" 浏览记录 \n");
printf("\n\n");
printf(" **************************************************** \n");
printf("\n");
printf(" 学号 姓名 成绩1 成绩2 成绩3 平均成绩 \n");
for(i=0;i<list.len;i++)
printf(" %-15s",list.student[i].num);
printf("%-8s",list.student[i].name);
printf("%5d",list.student[i].score[0]);
printf(" %5d",list.student[i].score[1]);
printf(" %5d",list.student[i].score[2]);
printf(" %8d\n",list.student[i].score[3]);
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 输入任意键回车刷新,返回主界面请输入0: ");
scanf("%s",&n);
void del_menu()
char n='2';
while (n!='0')
system("cls");
printf("\n\n");
printf(" 删除记录 \n");
printf("\n\n");
printf(" **************************************************** \n");
printf("\n");
printf(" 1.删除记录 \n");
printf("\n");
printf(" 0.返回主界面 \n");
printf("\n");
printf(" **************************************************** \n");
printf("\n\n");
printf(" 请输入操作序号: ");
scanf("%s",&n);
if(n=='1')
del();
printf(" 输入任意键回车删除记录,返回主界面请输入0: ");
scanf("%s",&n);
void del()
int i,j;
char name[8];
printf(" 请输入学生姓名: ");
scanf("%s",name);
for(i=0;i<list.len;i++)
if(strcmp(name,list.student[i].name)==0)
for(j=i;j<list.len-1;j++)
list.student[j].score[0]=list.student[j+1].score[0];
list.student[j].score[1]=list.student[j+1].score[1];
list.student[j].score[2]=list.student[j+1].score[2];
list.student[j].score[3]=list.student[j+1].score[3];
strcpy(list.student[j].num,list.student[j+1].num);
strcpy(list.student[j].name,list.student[j+1].name);
list.len=list.len-1;
参考技术A 我们以前也做过
以上是关于学生成绩管理系统c的主要内容,如果未能解决你的问题,请参考以下文章