帮忙改下c语言课程设计 成绩记录簿

zhang60991 2009-07-02 12:43:09
主要内容 开发一个小型的成绩记录簿系统,使之能提供以下功能:
(1)完成学生成绩信息录入功能(用文件保存)?
(2)学生信息、成绩信息的浏览功能--输出?
(3)查询和排序功能:(至少一种查询方式)--算法?
(4)各类信息的删除与修改

下面是我下的 帮忙改下


#include <stdio.h>
#include <string.h>
struct student
{
int num[10];//学号
char name[20];
float cgrade[4];
struct student *next;
};
struct student stu[50];
void menu()
{
printf ("********************************************************************************");
printf("\t1输入学生资料\t\t\t\t\t2显示学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4成绩高低排序\n");
printf("\t5删除学生信息\t\t\t\t\t6修改学生资料\n");
printf("\t0退出系统\n") ;
printf ("********************************************************************************\n");
}
//输入学生资料
void luru(FILE *fp)
{ int i=0;
char choice='y';
do
{ printf("学号");
scanf("%d",&stu[i].num);
printf("姓名");
scanf("%s",stu[i].name);
printf("C语言成绩");
scanf("%f",&stu[i].cgread);
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
puts("data write error");
i++;
fflush(stdin);
printf("continue(y/n)?");
scanf("%c",&choice);
}
while((choice=='y' || choice='Y'));
fclose(fp);
}
//显示学生资料
void xianshi(FILE *fp)
{ int i,m;
for(i=0;feof(fp)==0;i++)
{ if(fread(&stu[i],sizeof(struct student),1,fp)!=1
&&feof(fp)==0)
puts("error");
}
m=i-1;
printf("there %d record\n",m);
for(i=0;i<m;i++)
{ printf("学号:%d 姓名:%s C语言成绩:%d\n",&stu[i].num,stu[i].name,&stu[i].cgread);
}
if(feof(fp)!=0)
{ puts("没有该学生信息");
}
fclose(fp);
}
//保存学生资料
FILE *file_operate(char *mode)
{
char choice;
FILE *fp;
do
{
fflush(stdin);
if((fp=fopen("student.dat", mode))==NULL) //打开文件
{
puts("File operation failure");
puts("Try Again(y/n)?");
scanf("%c", &choice);
}
}while(choice=='y' || choice=='Y');
if(choice=='n' || choice=='N')
exit(0); //出现异常退出
return fp;
}

char get_menu_choice()
{ char menu_choice;
do
{
fflush(stdin);
printf("Please choice: ");
scanf("%c", &menu_choice);
if(menu_choice<'0' || menu_choice>'6')
puts("input error, try again.");
}while(menu_choice<'0' || menu_choice>'6');
return menu_choice;
}

void menu_done()
{ while(1)
{ menu();
switch(get_menu_choice())
{
case'1':
void suru(file_operate("a"));
system("pause");
system("cls");
break;
case'2':
void xianshi(file_operate("rb"));
system("pause");
system("cls");
break;
case'3':
void chaxun(file_operate("rb"));
system("pause"); /*停顿*/
system("cls"); /*清屏*/
break;
case'4':
void paixu(file_operate("rb"));
system("pause");
system("cls");
break;
case'5':
void shanchu(file_operate("r"));
system("pause");
system("cls");
break;
case'6':
void xiugai(file_operate("rb"));
system("pause");
system("cls");
break;
case'0':
printf("Thank you for use this program.\n");
system("pause");
system("cls");
exit(1);
}
}
}

//成绩高低排序
void paixu(FILE *fp)
{ int i,j,k,m;
struct student t;
for(i=0;feof(fp)==0;i++)
{ if(fread(&stu[i],sizeof(struct student),1,fp)!=1
&&feof(fp)==0)
puts("error");
}
m=i-1;
for(i=0;i<m;i++)
{ k=i;
for(j=i+1;j<m+1;j++)
if(stu[j].cgread<stu[k].cgread)
k=j;
t=stu[k];stu[k]=stu[i];stu[i]=t;
}
for(i=0;i<m;i++)
{ printf("学号:%d 姓名:%s C语言成绩:%f\n",&stu[i].num,stu[i].name,&stu[i].cgread);
}
fclose(fp);
fp=file_operate("w");
for(i=0;i<m;i++)
{ if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
puts("error");
}
fclose(fp);
}
//删除学生信息
void suanchu(FILE *fp)
{ int i,m,t=-1;
long num_temp;
char choice='y';
for(i=0;feof(fp)==0;i++)
{ if(fread(&stu[i],sizeof(struct student),1,fp)!=1
&&feof(fp)==0)
puts("error");
}
m=i-2;
do
{ fflush(stdin);
printf("请输入要删除学生的学号:\n");
scanf("%1d",&num_temp);
for(i=0;i<m;i++)
{ if(stu[i].num==num_temp)
{ printf("学号:%d 姓名:%s C语言成绩:%f\n",&stu[i].num,stu[i].name,&stu[i].cgread);
fflush(stdin);
printf("delete%1d(y/n)?",num_temp);
scanf("%c",&choice);
if(choice=='n'&&choice=='N')
break;
for(t=i; t<m; t++)
stu[t]=stu[t+1];
puts("delete data done.");
m--;
}
}
if(t==-1 && choice!='n' && choice!='N')
printf("No %d's data!\n",num_temp);
fflush(stdin);
printf("continue(y/n)?");
scanf("%c",&choice);
}while ( choice=='y' || choice=='Y' );
fclose(fp);
fp=file_operate("w");
for(i=0; i<m+1; i++) //保存删除后学生信息
{
if(fwrite(&stu[i], sizeof(struct student), 1, fp)!=1)
puts("error");
}
fclose(fp);
}
//修改学生资料
void xiugai(FILE *fp)
{
long change_number;
char choice;
int i,m,j=0;
for(i=0;feof(fp)==0;i++)
if(fread(&stu[i],sizeof(struct student),1,fp)!=1&& feof(fp)==0)
puts("error");
m=i-1;
do
{
fflush(stdin);
printf("请你输入要修改的学生学号:");
scanf("%ld",&change_number);
for(i=0;i<m;i++)
if(change_number==stu[i].num)
{
printf("change %ld's data!\n",&change_number);
printf("学号:");
scanf("%ld",&stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
printf("C语言成绩:");
scanf("%s",stu[i].cgread);

}
fflush(stdin);
printf("continue(y/n)?");
scanf("%c",&choice);
}while(choice=='y'||choice=='Y');
fclose(fp);
fp=file_operate("w");
for(i=0;i<m;i++) //保存修改后学生信息
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
puts("change error");
puts("change done.");
fclose(fp);
}

//查询学生资料
void chaxun(FILE *fp)
{
int i,m,t;
long number;
char search_name[20];
char choice='y';
for(i=0;feof(fp)==0;i++)
{
if(fread(&stu[i],sizeof(struct student),1,fp)!=1 && feof(fp)==0)
puts("error");
}
m=i-1;
do
{
printf("1.按姓名查询 2.按学号查询\n");
scanf("%d",&t);
if(t==1) //按姓名查询
{

fflush(stdin);
puts("请输入姓名:");
gets(search_name);
for(i=0;i<m;i++)
{
if(strcmp(search_name,stu[i].name)==0)
{
printf("学号:%d 姓名:%s C语言成绩:%d\n",&stu[i].num,stu[i].name,&stu[i].cgread);
}

}

}
else if(t==2) //按学号查询
{

fflush(stdin);
puts("请输入学号:");
scanf("%ld",&number);

for(i=0;i<m;i++)
{
if(number==stu[i].num)
printf("学号:%d 姓名:%s C语言成绩:%d\n",&stu[i].num,stu[i].name,&stu[i].cgread);
}
}

if(feof(fp)!=0)
puts("searching done.");
printf("Y 继续 N 停止");
scanf("%c",&choice);
}while(choice=='y'||choice=='Y');

fclose(fp);
}

void main()
{
system("cls");
menu_done();
return 0;
}
...全文
302 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧