c语言

来源:互联网 发布:凯立德导航端口怎么看 编辑:程序博客网 时间:2024/04/29 23:56

我闲着没事编了个学生成绩录入的程序。

#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;
}
}
}

0 0
原创粉丝点击