学生成绩管理系统c

题目:学生成绩管理系统

功能:学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。系统
要求实现以下功能:
1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);
2、信息查询:输入学号,查询学生各门课程的成绩,并显示。
3、排序:按各门课程的成绩平均分进行排序,并显示。

4、信息删除与修改——输入学号,删除该学生的成绩信息。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。
2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。
3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。
要求:1、用C语言实现程序设计;

2、利用结构体数组实现学生信息的数据结构设计;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序加必要的注释。

课程设计实验报告要求:

1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。

2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、

小结等。

#include "stdio.h"
#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);
}

我想这个程序包含了你那个成绩管理系统的全部要求,但我这个是教材管理系统我想改一下就可以了,具体如何改就要看楼主的天赋咯,呵呵。参考一下吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-23
楼主这分给的,只能是已经做过的顺便发给你,不可能专门做一个啊。呵呵