跪求!!!!!!!!!!!!!!!!!!!!!!!!!
????????答案!!!
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
(1)
系统以菜单方式工作
(2) 学生信息录入功能(学生信息用文件保存)---输入
(3) 学生信息浏览功能---输出
(4)
查询、排序功能---算法
(5) 按学号查询
(6) 按姓名查询
(7) 学生信息的删除与修改(可选项)
我写的是:(但有错,能帮忙改一下的拿出你们的手哈!!!!)
#include <stdio.h>
#include <stdlib.h>
#include
<stdafx.h>
typedef struct node
{
char num[10];
char
name[10];
int
score[5];/*score[0]存数学成绩score[1]语文成绩score[2]英语成绩score[3]总分score[4]平均分*/
struct node *next;
}student;/*学生成绩结构体*/
/*初始化结构体*/
student
*init(student *t)
{
t=(student
*)malloc(sizeof(student));
t->next=NULL;
t->score[4]=t->score[3]=t->score[0]=t->score[1]=t->score[2]=0;
return
t;
}
/*保存数据*/
void save(student *stu)
{
FILE *fp;
if((fp=fopen( "score1","w"))==NULL)/*为输出打开文件score1*/
{
printf("cannot open file/n");exit(0);
}
stu=stu->next;
while(stu!=NULL)
{
if(fwrite(stu,sizeof(student),1,fp)!=1)
printf("file write
error/n");
stu=stu->next;
}
fclose(fp);
}
/*读取数据*/
student * load(student *stu)
{
FILE
*fp;student *p,*r;r=stu;
if((fp=fopen("score1","r"))==NULL)/*为输入打开文件score1*/
return stu;
do
{ p=(student *)malloc(sizeof(student));
p->next=NULL;
if((fread(p,sizeof(student),1,fp)!=1)){fclose(fp);return stu;};
r->next=p;
r=r->next;
}while(1);
}
/*输出一个特定的学生的成绩*/
void output1(student *t)
{ int k;
printf("%s/t%s/t",t->num,t->name);
for(k=0;k<5;k++)
printf("%d/t",t->score[k]);
printf("/n");
}
/*输出全体学生的成绩*/
void output(student
*stu)
{
stu=stu->next;
printf("学号/t姓名/t数学/t语文/t英语/t总分/t平均分/n");
while(stu!=NULL)
{
output1(stu);
stu=stu->next;
}
}
/*将stu后插在t中*/
student * charu(student *stu,student *t)
{student
*p;int k;
p=(student *)malloc(sizeof(student));
strcpy(p->num,stu->num);
strcpy(p->name,stu->name);
for(k=0;k<5;k++)
p->score[k]=stu->score[k];
p->next=t->next;
t->next=p;
return
p;
}
/*按成绩排序*/
void paixu(student *stu,int i)
{
student
*t,*p,*r;
int j,k;p=stu;
printf("输入0按数学成绩/n");
printf("输入1按语文成绩/n");
printf("输入2按英语成绩/n");
printf("输入3按总分/n");
printf("输入4按平均分/n");
do
{
scanf("%d",&j);
if(j<0&&j>4) printf("输入错误请重新输入/n");
else break;
}while(1);
t=init(t);
r=t;
stu=stu->next;
if(t->next==NULL)
r=charu(stu,t);/*在排序好的链表t中插入第一个节点*/
if(i==0)/*按升序排序*/
while(stu->next!=NULL)
{
stu=stu->next;
if(r->score[j]>stu->score[j])
r=t;/*如果待插入的score[j]<当前的score[j],指针r回溯*/
while(r->next->score[j]<stu->score[j]&&r->next!=NULL)
r=r->next;/*找到比待插入的score[j]大的指针r->next*/
r=charu(stu,r);/*在r后面插入stu*/
}
else
while(stu->next!=NULL)
{
stu=stu->next;
if(r->score[j]<stu->score[j]) r=t;
while(r->next->score[j]>stu->score[j]&&r->next!=NULL)
r=r->next;
r=charu(stu,r);
}
output(t);
}
/*排序菜单*/
void output2(student *stu)
{ int i;
output(stu);
printf("输入 0 升序/n");
printf("输入 1 降序/n");
printf("输入其他任意字符退出/n");
scanf("%d",&i);
if(i==0||i==1)
paixu(stu,i);
printf("输入任意字符结束/n");
getch();
}
/*查找学生号为num是否存在*/
student * findnum(char *num,student *t,int
*i)
{
*i=1;
if(t->next==NULL)
return t;
else
{
*i=strcmp(t->next->num,num);
while(*i<0)/*t->next->num<num时查找下一个*/
{
t=t->next;
if(t->next==NULL)
return
t;
*i=strcmp(t->next->num,num);
}
}
return
t;/*t->next->num>=num时返回,此时i>=0*/
}
/*插入一个学生信息*/
student *
insertstu(char *num,student *stu,char *name)
{ student *p,*t;int
*i,j;i=&j;
t=findnum(num,stu,i);/*查找该学号是否存在*/
if(j!=0)/*该学号不存在,则插入*/
{
p=init(p);
strcpy(p->num,num);
strcpy(p->name,name);
p->next=t->next;
t->next=p;
return stu;
}
else
{printf("已有此学号/n学号/t姓名/n%s/t%s/n",t->next->num,t->next->name);return
stu;}
}
/*录入新学生信息*/
void base(student *stu)
{
char
num[10],name[20];
printf("输入e结束输入新学生的信息/n");
printf("num(不超过10个数)/tname(不超过10个字)/n");
scanf("%s",num);
do
{
printf("/t/t/t");
scanf("%s",name);
stu=insertstu(num,stu,name);/*插入一个学生信息*/
scanf("%s",num);
}while(num[0]!='e');
output(stu);
printf("输入任意字符退出/n");
getch();
}
/*增加修改一门课程成绩*/
void zengjia(student *t,int i)
{
t->score[3]-=t->score[i];/*总分减去第i门课的成绩*/
scanf("%d",&(t->score[i]));/*输入第i门课的成绩*/
t->score[3]+=t->score[i];/*总分加上第i门课的成绩*/
}
void deletegrade(student
*t,int i)
{
t->score[3]-=t->score[i];/*总分减去第i门课的成绩*/
t->score[i]=0;/*第i门课的成绩归零*/
}
/*修改成绩*/
void altergrade(student
*stu)
{
int j,*i;student *t;char a,*num;
i=&j;
printf("0
修改数学成绩/n");
printf("1 修改语文成绩/n");
printf("2 修改英语成绩/n");
printf("3
删除数学成绩/n");
printf("4 修改语文成绩/n");
printf("5 修改英语成绩/n");
printf("输入 e
结束操作/n");
a=getch();
printf("学号/t成绩/n");
scanf("%s",num);
while(num[0]!='e')
{
t=findnum(num,stu,i);/*按学生号查找学生信息*/
if(j==0)/*学生号存在*/
{
t=t->next;
switch(a)
{
case '0':
zengjia(t,0);
break;
case '1':
zengjia(t,1);
break;
case '2':
zengjia(t,2);
break;
case
'3':
deletegrade(t,0);
break;
case '4':
deletegrade(t,1);
break;
case '5':
deletegrade(t,2);
break;
default:break;
}
t->score[4]=t->score[3]/3;
}
else
printf("无此学号/n");
scanf("%s",num);
}
output(stu);
printf("输入任意字符结束/n");
getch();
}
/*第i科成绩录入*/
student
gradeenter(student *stu,int i)
{
student
*t;t=stu;
t=t->next;
printf("学号/t该科成绩/n");
while(t!=NULL)
{
printf("%s/t",t->num);
if(t->score[i]==0)/*如果学号为t->num的同学该科成绩没有*/
{
scanf("%d",&t->score[i]);
t->score[3]+=t->score[i];/*学号为t->num的总分*/
t->score[4]=t->score[3]/3;/*学号为t->num的平均分*/
}
else
printf("%d/n",t->score[i]);
t=t->next;/*录入下一个同学的该科成绩*/
}
printf("该科全部输入完成/n输入任意字符结束/n");
getch();
}
/*成绩录入菜单*/
void
entergrade(student *stu)
{
int i;
printf("0 录入数学成绩/n");
printf("1 录入语文成绩/n");
printf("2 录入英语成绩/n");
scanf("%d",&i);
switch(i)
{
case 0:gradeenter(stu,i);break;
case
1:gradeenter(stu,i);break;
case 2:gradeenter(stu,i);break;
default:printf("输入错误请输入相应操作的题号/n");
}
}
/*按学生号查找学生*/
void chaxun(student *stu)
{
char *num;int
j,k,*i;student *t;i=&j;
printf("输入要查询的学生学号/n");
scanf("%s",num);
t=findnum(num,stu,i);/*查找学生号为num是否存在*/
if(j==0)/*该学生号存在*/
{
t=t->next;
printf("查询结果为/n");
printf("学号/t姓名/t数学/t语文/t英语/t总分/t平均分/n");
output1(t);/*输出此学生信息*/
}
else
printf("查无此号/n");
printf("输入任意字符结束/n");
getch();
}
/*统计全班人数和平均分*/
void
tongji(student *stu)
{
int total=0,score=0;
stu=stu->next;
while(stu!=NULL)
{
score+=stu->score[3];
stu=stu->next;
total++;
}
score=score/total;
printf("班级总人数为:%d平均分为:%d/n输入任意字符退出/n",total,score);
getch();
}
/*按分数段查询*/
void fenshuduan(student *stu)
{
int
i,min,max,j;
printf("输入0按数学分数段/n");
printf("输入1按语文分数段/n");
printf("输入2按英语分数段/n");
printf("输入3按总分分数段/n");
printf("输入4按平均分分数段/n");
scanf("%d",&i);
printf("输入分数段上限:");
scanf("%d",max);
printf("/n输入分数段下限:");
scanf("%d",min);
if(max<min)
{j=max;max=min;min=j;}
stu=stu->next;
printf("学号/t姓名/t数学/t语文/t英语/t总分/t平均分/n");
while(stu!=NULL)
{
if(min<=stu->score[i]&&stu->score[i]<=max)/*将分数段内的同学信息输出*/
output1(stu);
stu=stu->next;
}
}
void main()
{
char a='8';
student
*stu;
stu=init(stu);/*初始化stu*/
stu=load(stu);/*读取score1的数据*/
while(a!='7')
{
clrscr();
printf("************************************************************/n");
printf(" 学生成绩管理系统/n");
printf(" -------made in china/n");
printf(" /t0 录入学生基本信息/n");
printf(" /t1 修改或删除学生成绩/n");
printf(" /t2
录入学生成绩/n");
printf(" /t3 显示指定学生的信息/n");
printf(" /t4
输出指定分数段的学生信息/n");
printf(" /t5 输出班级总人数和平均分/n");
printf(" /t6
输出全体学生的信息/n");
printf(" /t7 退出/n");
printf("*************************************************************/n");
a=getch();
switch(a)
{
case'0':base(stu);break;
case'1':altergrade(stu);break;
case'2':entergrade(stu);break;
case'3':chaxun(stu);break;
case'4':fenshuduan(stu);break;
case'5':tongji(stu);break;
case'6':output2(stu);break;
case'7':break;
default:printf("i am sorry to hear that you enter the
wrong num/n");
printf("按任意键重新输入/n");getch();continue;
}
}
save(stu);/*将数据保存在score1中*/
printf("欢迎再次使用学生成绩管理系统........请按任意键退出.......");
getch();
}
结果如下::::
警告 1 warning C4627: “#include <stdlib.h>”:
在查找预编译头使用时跳过 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 3 xueshengguanlixt
错误 2 error
C3861: “malloc”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 16 xueshengguanlixt
错误 3 error
C3861: “exit”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 27 xueshengguanlixt
错误 4 error
C3861: “malloc”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 45 xueshengguanlixt
错误 5 error
C3861: “malloc”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 76 xueshengguanlixt
错误 6 error
C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 77 xueshengguanlixt
错误 7 error
C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 78 xueshengguanlixt
错误 8 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 138 xueshengguanlixt
错误 9 error
C3861: “strcmp”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 149 xueshengguanlixt
错误 10 error
C3861: “strcmp”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 155 xueshengguanlixt
错误 11 error
C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 167 xueshengguanlixt
错误 12 error
C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 168 xueshengguanlixt
错误 13 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 192 xueshengguanlixt
错误 14 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 218 xueshengguanlixt
错误 15 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 257 xueshengguanlixt
错误 16 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 280 xueshengguanlixt
错误 17 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 316 xueshengguanlixt
错误 18 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 331 xueshengguanlixt
错误 19 error
C3861: “clrscr”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 367 xueshengguanlixt
错误 20 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 380 xueshengguanlixt
错误 21 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 392 xueshengguanlixt
错误 22 error
C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 397 xueshengguanlixt
错误 23 fatal
error C1070: 文件“c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp”中的
#if/#endif 对不匹配 c:/users/administrator/documents/visual studio
2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 399 xueshengguanlixt