C语言程序设计
求高手帮我设计一个“学生成绩管理系统”主菜单有输入成绩,查询成绩,添加成绩,删除成绩,并且相互联通…
追问:来自手机问问高手.能不能帮我改简单一点,最好是都用if 语句.这样的太复杂了.好多语法都没学过呢
求高手帮我设计一个“学生成绩管理系统”主菜单有输入成绩,查询成绩,添加成绩,删除成绩,并且相互联通…
追问:来自手机问问高手.能不能帮我改简单一点,最好是都用if 语句.这样的太复杂了.好多语法都没学过呢
答案:这个是带存档的。看看有什么地方需要改进。#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct student
{
int number;//学号
char name[30];//姓名
int a,b,c;//三门课成绩
float aver;//平均成绩
}student;
typedef struct node
{
student data;
struct node *next;
}Node,*Link;
void xian1()
{
printf(" 学籍管理系统\n\n");
}
void xian2()
{
printf(" ╔═════════════╦══════════════╗\n");
printf(" ║ 1.添加学生资料; ║ 6.清除所有资料; ║\n");
printf(" ╠═════════════╬══════════════╣\n");
printf(" ║ 2.查找学生资料; ║ 7.查看全班平均分; ║\n");
printf(" ╠═════════════╬══════════════╣\n");
printf(" ║ 3.修改学生资料; ║ 8.查看所有学生平均分; ║\n");
printf(" ╠═════════════╬══════════════╣\n");
printf(" ║ 4.删除学生资料; ║ 9.查看菜单项; ║\n");
printf(" ╠═════════════╬══════════════╣\n");
printf(" ║ 5.按名次查看成绩; ║ 0.退出学籍系统; ║\n");
printf(" ╚═════════════╩══════════════╝\n");
}
void Save(Link L)//保存学生资料
{
Node *p;
FILE *fp;
int flag=1,count=0;
fp=fopen("input.dat","wb");
if(fp==NULL)
{
printf("\n=====>提示重新打开文件时发生错误!\n");
return;
}
p=L->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{ p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
fclose(fp);
}
void Saveas(Link L)//是否保存资料
{
char h;
printf("是否保存设置?(y/n):");
h=getchar();
h=getchar();
if(h!='n')
Save(L);
}
Node *Locate(Link L,int number)//查找
{
Node *p;
p=L->next;
while(p)
{
if(p->data.number==number)
return p;
p=p->next;
}
return p;
}
void Findname(Link L)//按姓名查找
{
Node *p=L->next;
char nam[20];
int flag=0;
printf("查找姓名:");
scanf("%s",nam);
if(p==NULL)
{printf("没有资料可供查找!\n");return;}
while(p)
{
if(strcmp(p->data.name,nam)==0)
{
printf("学号:%d\n",p->data.number);
printf("姓名:%s\n",p->data.name);
printf("第1门成绩:%d\n",p->data.a);
printf("第2门成绩:%d\n",p->data.b);
printf("第3门成绩:%d\n",p->data.c);
printf("平均分:%f\n",p->data.aver);
flag++;
}
p=p->next;
}
if(flag==0)
printf("\n\t\t\t没有该生!\n");
}
void Findnumber(Link L)//按学号找
{
Node *p;
int number;
printf("查找学号:");
scanf("%d",&number);
p=Locate(L,number);
if(p==NULL)
{
printf("\n\t\t\t没有该生!");return;}
printf("\n学号:%d\n",p->data.number);
printf("姓名:%s\n",p->data.name);
printf("第1门成绩:%d\n",p->data.a);
printf("第2门成绩:%d\n",p->data.b);
printf("第3门成绩:%d\n",p->data.c);
printf("平均分:%f\n",p->data.aver);
}
void ADD(Link L)//添加学生
{
Node *w,*r,*p;
int number;
r=L;
while(r->next!=NULL)
r=r->next;
printf("学号:");
scanf("%d",&number);
w=Locate(L,number);
if(w)
{
printf("=====>提示:该同学已存在!\n");
return;
}
p=(Node *)malloc(sizeof(Node));
p->next=NULL;
printf("姓名:");
scanf("%s",p->data.name);
p->data.number=number;
p->data.aver=0.0;
printf("第1门分数:");
scanf("%d",&p->data.a);
printf("第2门分数:");
scanf("%d",&p->data.b);
printf("第3门分数:");
scanf("%d",&p->data.c);
p->data.aver=(p->data.a)+(p->data.b)+(p->data.c);
p->data.aver=p->data.aver/3;
printf("=====>提示:添加成功!\n");
r->next=p;
Save(L);
}
void Modify(Link L)//修改
{
int number;
Node *p;
printf("需修改人的学号:");
scanf("%d",&number);
p=Locate(L,number);
if(!p)
printf("=====>提示:没有该生资料!\n");
else
{
printf("姓名:");
scanf("%s",p->data.name);
printf("学号:");
scanf("%d",&p->data.number);
printf("第1门分数:");
scanf("%d",&p->data.a);
printf("第2门分数:");
scanf("%d",&p->data.b);
printf("第3门分数:");
scanf("%d",&p->data.c);
p->data.aver=(p->data.a)+(p->data.b)+(p->data.c);
p->data.aver=p->data.aver/3;
printf("=====>提示:修改成功!\n");
Saveas(L);
}
}
void C易做图ver(Link L)//计算全班平均成绩
{
Node *p;
float sum=0.0,aver;
int count=0;
p=L->next;
if(p==NULL)
{printf("\t\t\t目前没有学生资料!\n");return;}
while(p)
{
sum+=(p->data.a)+(p->data.b)+(p->data.c);
p=p->next;
count++;
}
aver=sum/count;
printf("\n全班平均成绩为:%f分\n",aver);
}
void Stuaver
上一个:vc++6.0调试c语言问题
下一个:C语言程序难学吗?