用c语言建立一个学生成绩管理系统

建立一个学生成绩管理系统。
程序运行时显示一个简单的菜单。
例如:
1.信息输入(INPUT)
2.信息的删除与修改
3.显示当前学生成绩的记录信息,若无记录,则给出提示信息
4.学生或者各个班级各门课程总分、平均分、最低分、最高分等的统计
5.可以按照班级、姓名、性别、分数(可以有区间)等方式进行查询
6.具有良好的交互功能
7.能使用图形函数进行简单的界面设计
8.具有良好的纠错功能
9.退出等等

第1个回答  2010-06-22
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#define N 1000
struct student /*学生信息*/
{
char num[20]; /*学号*/
char name[20]; /*姓名*/
char sex; /* 性别,'1'->男, '0'->女*/
short age; /*年龄*/
short score[3]; /*三门课程的成绩*/
short sum; /*总成绩*/
short deptid; /*所在系的系号*/
struct student *next1;
struct student *next2;
}*head;
struct student std[N];

struct department /*系信息,假设总共有3个系*/
{
short id; /*系号*/
char name[20]; /*系名*/
char dean[20]; /*系主任*/
char location[30]; /*系的办公地点*/
}depa[3]={{1,"计算机系","张三","电教楼505"},{2,"法政系","李四","电教楼404"},{3,"外语系","王五","实验楼401"}};
void menu()
{
printf("\n=========学生信息管理系统========\n");
printf("1. 录入学生信息\n");
printf("2. 显示所有学生信息\n");
printf("3. 按学号查询学生信息\n");
printf("4. 按姓名查询学生信息(支持模糊查询)\n");
printf("5. 按年龄查询学生信息\n");
printf("6. 查询指定学生的所在系的信息(包括系名、系主任、系的办公地点)\n");
printf("7. 修改学生信息\n");
printf("8. 删除学生信息\n");
printf("9. 追加学生信息\n");
printf("10. 保存学生信息到文件\n");
printf("11. 从文件载入学生信息\n");
printf("12. 按成绩从高到低显示所有学生信息[选作题目]\n");
printf("0. 退出系统\n");
}
//录入学生信息
void create()
{
int i,j;
char tmp[30];
struct student *p;
head=NULL;
for(i=1;;i++)
{
if(i!=1)
{
printf("是否继续录入(y/n):");
gets(tmp);
if(strcmp(tmp,"n")==0)
break;
}
p=(struct student *)malloc(sizeof(struct student));
printf("\n====请输入第%d个学生信息====\n",i);
printf("学号:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性别,('1'->男, '0'->女):");
p->sex=getchar();
getchar();
printf("年龄:");
gets(tmp);
p->age=atoi(tmp);
printf("三门课程的成绩:\n");
p->sum=0;
for(j=0;j<3;j++)
{
printf("第%d个成绩:",j+1);
gets(tmp);
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("总成绩:%d\n",p->sum);
printf("所在系的系号[1->计算机系;2->法政系;3->外语系]:");
gets(tmp);
p->deptid=atoi(tmp);
p->next1=head;
head=p;
}
printf("信息录入完毕,按任意键继续……");
getch();
}
//显示所有学生信息
void displayAll()
{
struct student *p;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在系的系号\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
p=p->next1;
}
printf("信息显示完毕,按任意键继续……");
getch();
}
//按学号查询学生信息
void searchOnNum()
{
int flag;
char tmp[30];
struct student *p;
p=head;
printf("请输入学号:");
gets(tmp);
flag=0;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在系的系号\n");
while(p!=NULL)
{
if(strcmp(tmp,p->num)==0)
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到学号是%s的学生,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//按姓名查询学生信息
void searchOnName()
{
int flag;
char tmp[30];
struct student *p;
p=head;
printf("请输入姓名:");
gets(tmp);
flag=0;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在系的系号\n");
while(p!=NULL)
{
if(strstr(p->name,tmp))
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//按年龄查询学生信息
void searchOnAge()
{
int flag;
char tmp[30];
struct student *p;
p=head;
printf("请输入年龄:");
gets(tmp);
flag=0;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在系的系号\n");
while(p!=NULL)
{
if(atoi(tmp)==p->age)
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到年龄是%s的学生,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//查询指定学生的所在系的信息
void searchDepa()
{
int i,flag;
char tmp[30];
struct student *p;
p=head;
printf("请输入姓名:");
gets(tmp);
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
for(i=0;i<3;i++)
{
if(p->deptid==depa[i].id)
{
flag=1;
printf("系名\t\t系主任\t\t系的办公地点\n");
printf("%s\t\t%s\t\t%s\n",depa[i].name,depa[i].dean,depa[i].location);
}
}
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s,或许%s系号输入时有误,按任意键继续……",tmp);
else
printf("\n显示完毕,按任意键继续……");
getch();
}
//修改学生信息
void update()
{
int flag,j;
char tmp[30];
char a;
struct student *p;
p=head;
printf("请输入姓名:");
gets(tmp);
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
flag=1;
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在系的系号\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
printf("\n====请输入新信息====\n");
printf("学号:");
gets(tmp);
if(strcmp(tmp,"")!=0)
strcpy(p->num,tmp);
printf("姓名:");
gets(tmp);
if(strcmp(tmp,"")!=0)
strcpy(p->name,tmp);
printf("性别,'1'->男, '0'->女:");
a=getchar();
if(a!='\n')
p->sex=a;
printf("年龄:");
gets(tmp);
if(strcmp(tmp,"")!=0)
p->age=atoi(tmp);
printf("三门课程的成绩:\n");
p->sum=0;
for(j=0;j<3;j++)
{
printf("第%d个成绩:",j+1);
gets(tmp);
if(strcmp(tmp,"")!=0)
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("总成绩:%d\n",p->sum);

printf("所在系的系号[1->计算机系;2->法政系;3->外语系]:");
gets(tmp);
if(strcmp(tmp,"")!=0)
p->deptid=atoi(tmp);
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s!按任意键继续……",tmp);
else
printf("\n修改完毕,按任意键继续……");
getch();
}
//删除学生信息
void delate()
{
int flag;
char tmp[30];
struct student *p,*q;
printf("请输入姓名:");
gets(tmp);
p=head;
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
flag=1;
if(p==head)
head=p->next1;
else
q->next1=p->next1;
free(p);break;
}
q=p;
p=p->next1;
}
if(flag==0)
printf("\n未找到%s,按任意键继续……",tmp);
else
printf("删除完毕,按任意键继续……");
getch();
}
//追加学生信息
void add()
{
int i,j;
char tmp[30];
struct student *p;
for(i=1;;i++)
{
if(i!=1)
{
printf("是否继续追加(y/n):");
gets(tmp);
if(strcmp(tmp,"n")==0)
break;
}
p=(struct student *)malloc(sizeof(struct student));
printf("\n====请输入第%d个追加信息====\n",i);
printf("学号:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性别,'1'->男, '0'->女:");
p->sex=getchar();
getchar();
printf("年龄:");
gets(tmp);
p->age=atoi(tmp);
p->sum=0;
for(j=0;j<3;j++)
{
printf("第%d个成绩:",j+1);
gets(tmp);
if(strcmp(tmp,"")!=0)
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("总成绩:%d\n",p->sum);
printf("所在系的系号[1->计算机系;2->法政系;3->外语系]:");
gets(tmp);
p->deptid=atoi(tmp);
p->next1=head;
head=p;
}
printf("追加成功,按任意键继续……");
getch();
}
//保存学生信息到文件
void save()
{
FILE *fp;
char filename[20]={"d://qq.dat"};
printf("请输入文件名如%s:",filename);
gets(filename);
while(strcmp(filename,"")==0)
{
printf("文件名不能为空,请重新输入:");
gets(filename);
}
if((fp=fopen(filename,"wb"))==NULL)
{
printf("write file open error!\n按任意键继续……");getch();
return;

}
struct student *p;
p=head;
printf("正在保存信息,请耐心等待……\n");
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next1;
}
fclose(fp);
printf("信息保存成功,按任意键继续……");getch();
}
//从文件载入学生信息
void load()
{
char filename[20];
FILE *fp;
printf("请输入文件名:");
gets(filename);
while(strcmp(filename,"")==0)
{
printf("文件名不能为空,请重新输入:");
gets(filename);
}
if((fp=fopen(filename,"rb"))==NULL)
{
printf("read file open error!\n按任意键继续……");getch();
return;
}
struct student *p,*q;
p=(struct student *)malloc(sizeof(struct student));
head=p;
printf("正在从磁盘载入信息,请耐心等待……\n");
while(!feof(fp))
{
if(1!=fread(p,sizeof(struct student),1,fp))
break;
p->next1=(struct student *)malloc(sizeof(struct student));
q=p;
p=p->next1;
}
q->next1=NULL;
fclose(fp);
printf("载入成功,按任意键继续……");getch();
}
//按成绩从高到低显示所有学生信息[选作题目]
void displayInOrder()
{
struct student *head1,*p,*q,*r;
p=(struct student *)malloc(sizeof(struct student));
p=head;
while(p!=NULL)
{
if(p==head)
{
head1=p;
p->next2=NULL;
}
else
{
q=head1;
while(1)
{
if(p->sum>q->sum)
{
if(q==head1)
{
p->next2=head1;
head1=p;break;
}
else
{
r->next2=p;
p->next2=q;break;
}
}
else if(q->next2==NULL)
{
q->next2=p;
p->next2=NULL;break;
}
r=q;
q=q->next2;
}
}
p=p->next1;
}
printf("学号\t姓名\t性别\t年龄\t三门课程的成绩\t\t总成绩\t所在系的系号\n");
p=head1;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
p=p->next2;
}
printf("信息显示完毕,按任意键继续……");getch();
}
//退出系统,判断是否真的退出
void exitSystem()
{
char x;
printf("你真的要退出系统吗?(Y/N)");
while(1)
{
x=getche();
if(x=='y' || x=='Y' || x=='n' || x=='N' )
break;
printf("\b");
}
if(x=='y' || x=='Y')
{
printf("\n");
exit(0);
}
return;
}

void main()
{
int c;
char choice[3];
while(1)
{
system("cls");
menu();
do
{
printf("请输入功能键:");
gets(choice);
c=atoi(choice);
}while(c>12||c<0);
switch(c)
{
case 1: create();break;
case 2: displayAll();break;
case 3: searchOnNum();break;
case 4: searchOnName();break;
case 5: searchOnAge();break;
case 6: searchDepa();break;
case 7: update();break;
case 8: delate();break;
case 9: add();break;
case 10: save();break;
case 11: load();break;
case 12: displayInOrder();break;
case 0: exitSystem();
}
}
}本回答被网友采纳