急急急!!跪求学生成绩管理系统,c语言操作,帮帮我啊

按学年、学期分学院、专业、班管理每个人的成绩,包括建立、插入、删除、查询和统计等功能。
小弟水平有限,只会简单的管理系统,对于上面按学年、学期分学院、专业、班管理,真的是不知道该怎么办,希望C语言高手帮帮小弟,在此感激不尽。
程序好的追加100分。
不要ctrl+c,这个比网上别的复杂一点,不要想着拿错的糊弄人

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define NULL 0
struct student
{
char xuehao[10];
char name[15];
char kechengbianhao[12];
char kechengmingcheng[12];
int chengji;
int xuefen;

struct student *next;
};
struct student *creat()/////创建链表
{
struct student *p,*head,*end;
head=p=end=(struct student *)malloc(sizeof(struct student));//创建一个节点
printf("====请输入学生信息====\n");
printf("请输入学号:");
scanf("%s",p->xuehao);
while(strcmp(p->xuehao,"0")!=0)
{
end=p;
printf("姓名:");
scanf("%s",p->name);
printf("课程编号:");
scanf("%s",p->kechengbianhao);
printf("课程名称:");
scanf("%s",p->kechengmingcheng);
printf("成绩:");
scanf("%d",&p->chengji);
printf("学分:");
scanf("%d",&p->xuefen);

p=(struct student *)malloc(sizeof(struct student));
end->next=p;
// end=p;
printf("请输入学号:");
scanf("%s",p->xuehao);
}
end->next=NULL;
return head;
}
void save(struct student *head)//保存链表为磁盘文件
{
FILE *fp;
struct student *p;
char filename[20];
int ch;
printf("请输入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))!=NULL)
{
printf("该文件已经存在,是否覆盖?\n");
printf("1、覆盖. 2、不覆盖\n");
scanf("%d",&ch);
if(ch!=1)
{
printf("请重新输入要保存的文件名:");
scanf("%s",filename);
}
}
if((fp=fopen(filename,"w"))==NULL)
{
printf("创建文件失败!\n");
return;//exit(0);正常退出,执行后显示press anykey to continue;
}
// getchar();
p=head;
while(p!=NULL)
{
fprintf(fp,"%s\n",p->xuehao);
fprintf(fp,"%s\n",p->name);
fprintf(fp,"%s\n",p->kechengbianhao);
fprintf(fp,"%s\n",p->kechengmingcheng);
fprintf(fp,"%d\n",p->chengji);
fprintf(fp,"%d\n",p->xuefen);
p=p->next;
}
fputs("over",fp);
printf("文件保存成功!\n");//
getchar();
fclose(fp);
}
void output(struct student *head)//输出链表
{
struct student *p;
p=head;
if(p==NULL)
{
printf("未创建任何记录!\n");
getchar();
return; //head;
}
while(p!=NULL)//do
{
printf("学号: %s",p->xuehao);
printf("\n姓名: %s",p->name);
printf("\n课程编号: %s",p->kechengbianhao);
printf("\n课程名称: %s",p->kechengmingcheng);
printf("\n成绩: %d",p->chengji);
printf("\n学分: %d",p->xuefen);

p=p->next;
}//while(p!=NULL);
getchar();
}
struct student *openfile()//打开文件,即新创建链表读取磁盘文件
{
struct student *head,*p,*f;
FILE *fp;
char filename[20];
int ch;
printf("请输入要打开的文件名:");//若文件保存在默认路径,读取时无需输入路径
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
printf("1、重新输入文件名 2、退出\n");
scanf("%d",ch);
if(ch==1)
scanf("%s",filename);
else if(ch==2)
//getchar();
//exit(0);
return NULL;
}
head=f=p=(struct student *)malloc(sizeof(struct student));
fscanf(fp,"%s%s%s%s%d%d",p->xuehao,p->name,p->kechengbianhao,p->kechengmingcheng,&p->chengji,&p->xuefen);
while(!feof(fp))
{
p=(struct student *)malloc(sizeof(struct student));
f->next=p;//节点连接
fscanf(fp,"%s%s%s%s%d%d",p->xuehao,p->name,p->kechengbianhao,p->kechengmingcheng,&p->chengji,&p->xuefen);
if(strcmp(p->xuehao,"over")==0)
{
f->next=NULL;
printf("文件打开成功,可显示信息!\n");
getchar();
return head;
}
f=p;
}
// fclose(fp);
// f->next=NULL;
// return head;
}
void sort_hao(struct student *head)//按学号排序
{
struct student *p,*f,*t;
char ch[100];
int i;
p=f=t=head;
if(head==NULL)
{
printf("未打开任何文件!\n");
getchar();
return;
}//ok
// f=p->next;
for(p=head;p->next!=NULL;p=p->next)//由P来控制循环次数
{
for(t=head,f=t->next;t->next!=NULL;t=t->next,f=f->next)
{
if(strcmp(t->xuehao,f->xuehao)>0)
{
strcpy(ch,t->xuehao);
strcpy(t->xuehao,f->xuehao);
strcpy(f->xuehao,ch);

strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);

strcpy(ch,t->kechengbianhao);
strcpy(t->kechengbianhao,f->kechengbianhao);
strcpy(f->kechengbianhao,ch);

strcpy(ch,t->kechengmingcheng);
strcpy(t->kechengmingcheng,f->kechengmingcheng);
strcpy(f->kechengmingcheng,ch);

i=t->chengji;
t->chengji=f->chengji;
f->chengji=i;

i=t->xuefen;
t->xuefen=f->xuefen;
f->xuefen=i;
}
}
}
printf("完成排序!\n");
getchar();
// return head;
}////循环判断,若此链表共有n个节点,则共需进行n^2次循环判断……………………
void sort_name(struct student *head)//按学生姓名排序
{
struct student *p,*f,*t;
char ch[100];
int i;
p=f=t=head;
if(head==NULL)
{
printf("文件未能打开!\n");
getchar();
return;//void类型无返回值,可以用return结束子程序以返回主程序,但return绝不能带回任何值
}
// f=p->next;
for(p=head;p->next!=NULL;p=p->next)
{
for(t=head,f=t->next;t->next!=NULL;t=t->next,f=f->next)//由于创建链表是以p->bianhao=0结束的故以f->next结束
{
if(strcmp(t->name,f->name)>0)
{
strcpy(ch,t->xuehao);
strcpy(t->xuehao,f->xuehao);
strcpy(f->xuehao,ch);

strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);

strcpy(ch,t->kechengmingcheng);
strcpy(t->kechengmingcheng,f->kechengmingcheng);
strcpy(f->kechengmingcheng,ch);

strcpy(ch,t->kechengbianhao);
strcpy(t->kechengbianhao,f->kechengbianhao);
strcpy(f->kechengbianhao,ch);

i=t->chengji;
t->chengji=f->chengji;
f->chengji=i;

i=t->xuefen;
t->xuefen=f->xuefen;
f->xuefen=i;
}
}
}
printf("完成排序!\n");
getchar();
// return head;
}
void search(struct student *head)//查询
{
struct student *p;
char str[20];
int i,j=0;
p=head;
if(head==NULL)
{
printf("未打开任何文件!");
getchar();
return;//
}
printf("1、按学号查询 2、按姓名查询\n");
scanf("%d",&i);
if(i==1)
printf("请输入学号:");
else
printf("请输入姓名:");
scanf("%s",str);
while(p!=NULL)
{
if(i==1)//按编号查询,只输出一个结果,需保证编号不能重复
{
if(strcmp(p->xuehao,str)==0)
{
printf("学号: %s\n姓名: %s\n课程编号: %s\n课程名称: %s\n成绩: %d\n学分: %d\n",p->xuehao,p->name,
p->kechengbianhao,p->kechengmingcheng,p->chengji,p->xuefen);
j=1;
break;
}
}
if(i==2)//按姓名查询,可输出多个结果
{
if(strcmp(p->name,str)==0)
{
printf("学号: %s\n姓名: %s\n课程编号: %s\n课程名称: %s\n成绩: %d\n学分: %d\n",p->xuehao,p->name,p->kechengbianhao,p->kechengmingcheng,p->chengji,p->xuefen);
j=1;
}
}
p=p->next;
}
getchar();//显示查询结果,没有的话将一闪而过
if(j==0)
printf("查找完毕,未搜到结果!\n");
// return;
}
struct student *add(struct student *head)//添加记录
{
struct student *p,*e,*f,*h;
if(head==NULL)
{
printf("未能打开任何文件!\n");
getchar();
return NULL;
}
h=e=f=head;
p=(struct student *)malloc(sizeof(struct student));//新添节点即新添加的记录
printf("学号:");
scanf("%s",p->xuehao);
printf("姓名:");
scanf("%s",p->name);
printf("课程编号:");
scanf("%s",p->kechengbianhao);
printf("课程名称:");
scanf("%s",p->kechengmingcheng);
printf("成绩:");
scanf("%d",&p->chengji);
printf("学分:");
scanf("%d",&p->xuefen);
if(strcmp(f->xuehao,p->xuehao)>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//while(f->next!=NULL)
{
f=f->next;
if(strcmp(f->xuehao,p->xuehao)>0)

{
e->next=p;
p->next=f;
printf("添加成功!\n");
return h;
}
else
e=e->next;
// f=f->next;
}while(f->next!=NULL);
if(f->next==NULL)
{
f->next=p;
p->next=NULL;
printf("添加成功!\n");
return h;
}
}
struct student *delete_mem(struct student *head)//删除个人信息
{
struct student *p,*e;
char str[20];
if(head==NULL)
{
printf("未能打开任何文件!\n");
getchar();
return NULL;
}
p=e=head;
printf("请输入要删除的学号:");
scanf("%s",str);
if(strcmp(p->xuehao,str)==0)
{
head=head->next;
printf("删除成功!\n");
return head;
}
p=p->next;
while(p!=NULL)
{
if(strcmp(p->xuehao,str)==0)
{
if(p->next!=NULL)
e->next=p->next;
if(p->next==NULL)
e->next=NULL;
printf("删除成功!\n");
return head;
}
p=p->next;
e=e->next;
}
printf("搜索完毕,未能找到结果!\n");
return head;
}
struct student *change(struct student *head)//修改记录
{
struct student *p;
char str[20];
if(head==NULL)
{
printf("未能打开任何文件!\n");
getchar();
return NULL;
}
p=head;
printf("请输入要修改的学生的学号:");
scanf("%s",str);
while(p!=NULL)
{
if(strcmp(p->xuehao,str)==0)
{
printf("学号: %s\n姓名: %s\n课程编号: %s\n课程名称: %s\n成绩: %d\n学分: %d\n",p->xuehao,p->name,p->kechengbianhao,p

->kechengmingcheng,p->chengji,p->xuefen);
printf("请按提示输入修改后的数据\n");
printf("学号:");
scanf("%s",p->xuehao);
printf("姓名:");
scanf("%s",p->name);
printf("课程编号:");
scanf("%s",p->kechengbianhao);
printf("课程名称:");
scanf("%s",p->kechengmingcheng);
printf("成绩:");
scanf("%d",&p->chengji);
printf("学分:");
scanf("%d",&p->xuefen);
printf("修改成功!\n");
getchar();
return head;
}
p=p->next;
}
printf("未能找到记录!\n");
return head;
}
void mima()//创建密码
{
FILE *fp;
char mima1[20],mima2[20];
int i=0;
if((fp=fopen("mima","r"))==NULL)
{
printf("密码尚未创建!\n");
// exit(0);
getchar();
do{
printf("请输入密码:");
scanf("%s",mima1);
printf("请再次输入密码:");
scanf("%s",mima2);
if(strcmp(mima1,mima2)!=0)
{
printf("两次输入的密码不一样,请重新输入\n");
i=1;
}
else
break;
}while(i);
fp=fopen("mima","w");
fprintf(fp,"%s",mima1);
printf("密码设置成功!\n");
fclose(fp);//创建文件后必须有fclose(fp),否则创建文件后数据丢失,内容为空
getchar();
return;
}
else
printf("密码已创建!\n");
getchar();
}
void delete_doc()//删除文件
{
FILE *fp;
char mima1[20],mima2[20],filename[20];
printf("请输入初始化密码:");
scanf("%s",mima1);
fp=fopen("mima","r");
fscanf(fp,"%s",mima2);
if(strcmp(mima1,mima2)==0)
{
printf("请输入要删除的文件名:");
scanf("%s",filename);
if(remove(filename)==0)//remove()函数
{
printf("删除成功!\n");
getchar();
return;
}
else{
printf("删除失败,请确认是否存在此文件.\n");
getchar();
return;}
}
else
printf("密码错误!\n");
getchar();
return;
}
void output_use()
{
printf("使用方法如下:\n");
printf("1、编辑个人信息后需要保存,否则当你再次启用该功能时将覆盖原来的信息.\n");
printf("2、保存信息后,若要在原文件中添加新的记录,则首先应启动/打开文件/功能,然后启动/添加记录/功能,添加完后保存.\n");
printf("3、除了要新建文件外,若要进行其他功能均需要先启动/打开文件/功能,才能继续,否则进行其他功能均不能对已有文件作任何改变.\n");
printf("4、编辑个人信息时,以学号为零作为结束,故学生信息中学号不能为零\n");
printf("5、由于有些限制没有编写,故在保存前至少编辑一个有效的学生信息\n");
printf("6、删除文件前需保证已经设置密码,否则出错!\n");
getchar();
// getchar();
// system("cls");
}
void output_view()
{
printf("·················\n");
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-29
你好歹给点分看有没有人给你弄,这程序要链表来写,初始化都10几行,一分都没有谁能一行一行给你写,有人帮你复制点现成的程序就不错了本回答被网友采纳