我闲着没事编了个学生成绩录入的程序。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include<malloc.h>
#include<windows.h>
#define LEN sizeof(struct z1)
#define DATA stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].total,stu[i].order
int num;
typedef struct z1
{
char no[20];
char name[10];
int chinese;
int math;
int total;
int order;
}STUDENT;
int n;
STUDENT stu[10];
/*以下是函数模型*/
void newRec(); /*新建学生记录*/
void showTable1(); /*打印表头*/
void showTable2(int);
void display(); /*显示所有学生信息*/
void searchRec(); /*查询学生记录*/
void modifyRec(); /*修改学生记录*/
void deleteRec(); /*删除学生记录*/
void copyRec(STUDENT *,STUDENT *);
void orderRec();
void saveRec(); /*保存记录*/
void loadRec(); /*读取记录*/
int findRec(char *,int,int); /*查找指定记录*/
void quit(); /*退出*/
void showTable1()
{
printf("*************学生信息表************\n");
printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
printf("| 学号 | 姓名 |语文成绩 |数学成绩 |总分 | 名次 |\n");
printf("|~~~~~~~~~|~~~~~~~~~~|~~~~~~~~~~~|~~~~~~~~~~|~~~~~~|~~~~~~~~|\n");
}
void quit()
{
char str[5];
printf("保存记录?(Y/N)");
scanf("%s",&str);
if(str[0]=='Y'||str[0]=='y')
saveRec();
exit(5);
}
void newRec()
{
int i;
int sum;
system("cls");
printf("请输入学生数:\n");
scanf("%d",&num);
for(i=0;i<num;i++)
{
system("cls");
sum=0;
printf("输入第%d个学生的学号:",i+1);
printf("输入学号:");
scanf("%s",&stu[i].no);
printf("输入姓名:");
scanf("%s",&stu[i].name);
printf("输入语文成绩:");
scanf("%d",&stu[i].chinese);
printf("输入数学成绩:");
scanf("%d",&stu[i].math);
sum=sum+stu[i].chinese+stu[i].math;
stu[i].total=sum;
stu[i].order=0;
}
}
void display()
{
int i;
showTable1();
for(i=0;i<num;i++)
{
printf("| %s | %4s | %3d | %3d |%2d | %3d |\n",stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].total,stu[i].order);
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
printf("输入任意键返回!");
getch();
}
void saveRec()
{
FILE *fp1,*fp2;
if((fp1=fopen("leige.dat","wb+"))==NULL)
{
printf("非法路径!");
exit(1);
}
if((fp2=fopen("jingge.dat","wb+"))==NULL)
{
printf("非法路径!");
exit(1);
}
printf("\n正在保存...\n");
fwrite(&num,LEN,1,fp2);
fwrite(stu,LEN,num,fp1);
fclose(fp1);fclose(fp2);
printf("\n保存成功!!\n");
Sleep(1000);
printf("\n输入任意键返回!");
getch();
}
void loadRec()
{
FILE *fp1,*fp2;
if((fp1=fopen("leige.dat","rb"))==NULL)
{
printf("非法路径!");
exit(1);
}
if((fp2=fopen("jingge.dat","rb"))==NULL)
{
printf("非法路径!");
exit(1);
}
system("cls");
printf("\n正在读取...\n");
fread(&num,LEN,1,fp2);
fread(stu,LEN,num,fp1);
fclose(fp1);fclose(fp2);
Sleep(2000);
printf("\n读取成功\n");
printf("\n输入任意键返回!");
getch();
}
int findRec(char *target,int tarType,int from)
{
int i;
for(i=from;i<num;i++)
{
if((tarType==1&&strcmp(target,stu[i].no)==0)||tarType==2&&strcmp(target,stu[i].name)==0)
return(i);
}
return(-1);
}
void searchRec()
{
int i;
int sum;
char no[20],str[8];
system("cls");
printf("请输入你想要修改的学生学号:");
scanf("%s",&no);
i=findRec(no,1,0);
showTable1();
printf("| %s | %4s | %3d | %3d |%2d | %3d |\n",stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].total,stu[i].order);
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("你确定要修改这名学生的信息(Y/N):");
scanf("%s",str);
if(str[0]=='y'||str[0]=='Y')
{
printf("输入学号:");
scanf("%s",&stu[i].no);
printf("输入姓名:");
scanf("%s",&stu[i].name);
sum=0;
printf("输入语文成绩:");
scanf("%d",&stu[i].chinese);
printf("输入数学成绩:");
scanf("%d",&stu[i].math);
sum=sum+stu[i].chinese+stu[i].math;
stu[i].total=sum;
stu[i].order=0;
}
printf("输出任意键返回!");
getch();
}
void modifyRec()
{
int i;
int sum;
char no[20],str[8];
system("cls");
printf("请输入你想要修改的学生学号:");
scanf("%s",no);
i=findRec(no,1,0);
showTable1();
printf("| %s | %4s | %3d | %3d |%2d | %3d |\n",stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].total,stu[i].order);
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("你确定要修改这名学生的信息(Y/N):");
scanf("%s",&str);
if(str[0]=='y'||str[0]=='Y')
{
printf("输入学号:");
scanf("%s",stu[i].no);
printf("输入姓名:");
scanf("%s",stu[i].name);
sum=0;
printf("输入语文成绩:");
scanf("%d",&stu[i].chinese);
printf("输入数学成绩:");
scanf("%d",&stu[i].math);
sum=sum+stu[i].chinese+stu[i].math;
stu[i].total=sum;
stu[i].order=0;
}
printf("输出任意键返回!");
getch();
}
void deleteRec()
{
int i,j;
char str[20];
system("cls");
printf("Please input the number you want to delete:");
scanf("%s",&str);
i=findRec(str,1,0);
for(j=i;j<num;j++)
stu[j]=stu[j+1];
num--;
saveRec();
}
void copyRec(STUDENT *src,STUDENT *dest)
{
strcpy(dest->no,src->no);
strcpy(dest->name,src->name);
dest->chinese=src->chinese;
dest->math=src->math;
dest->total=src->total;
dest->order=src->order;
}
void orderRec1()
{
int i;
stu[0].order=1;
for(i=1;i<num;i++)
if(stu[i].chinese==stu[i-1].chinese)
stu[i].order=stu[i-1].order;
else
stu[i].order=i+1;
}
void sortRec1()
{
int i,j,flag;
STUDENT t;
system("cls");
printf("\n正在排序...\n");
for(i=0;i<num-1;i++)
{
flag=0;
for(j=num-1;j>i;j--)
if(stu[j].chinese>stu[j-1].chinese)
{
copyRec(&stu[j],&t);
copyRec(&stu[j-1],&stu[j]);
copyRec(&t,&stu[j-1]);
flag=1;
}
if(!flag)
break;
}
orderRec1();
Sleep(2000);
printf("\n成功排序!!\n");
saveRec();
}
void orderRec2()
{
int i;
stu[0].order=1;
for(i=1;i<num;i++)
if(stu[i].math==stu[i-1].math)
stu[i].order=stu[i-1].order;
else
stu[i].order=i+1;
}
void sortRec2()
{
int i,j,flag;
STUDENT t;
system("cls");
printf("\n正在排序...\n");
for(i=0;i<num-1;i++)
{
flag=0;
for(j=num-1;j>i;j--)
if(stu[j].math>stu[j-1].math)
{
copyRec(&stu[j],&t);
copyRec(&stu[j-1],&stu[j]);
copyRec(&t,&stu[j-1]);
flag=1;
}
if(!flag)
break;
}
orderRec2();
Sleep(2000);
printf("\n成功排序!!\n");
saveRec();
}
int menu()
{
system("cls");
printf("*****************************************************************\n");
printf("******************************学生信息表*************************\n");
printf("*****************************************************************\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(" 0.退出 \n");
printf("\n输入一个0到9的数字:\n");
scanf("%d",&n);
printf("\n");
return n;
}
void main()
{
system("cls");
for(;;)
{
switch(menu())
{
case 1:newRec();break;
case 2:display();break;
case 3:searchRec();break;
case 4:modifyRec();break;
case 5:deleteRec();break;
case 6:sortRec1();break;
case 7:sortRec2();break;
case 8:saveRec();break;
case 9:loadRec();break;
case 0:quit();break;
}
}
}