|
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"bios.h"
#include"stdlib.h"
#define M 50
#define N 3
#define ESC 0x011b
#define UP 0x4800
#define DOWN 0x5000
#define ENTER 0x1C0D
void newfile();
void loadfile();
void savefile();
void append();
void modify();
void deleted();
void search();
void tongji();
void print();
void printall();
struct student
{
char number[11];
char name[11];
char class1[13];
int score[N];
};
struct student stu[N];
char kemu[N][10]={"数学","英语","语文"};
int key,i,y;char *buf;char cf[8][50]={"1:新建文件","2:添加学生信息","3:修改学生信息","4:删除学生信息","5:学生成绩查询","6:学生信息统计","7:学生成绩输出","0退出"};
int n=-1;
void main()
{
textbackground(WHITE);
textcolor(BLACK);
clrscr();
y=4;
while(1)
{
textbackground(BLUE);
clrscr();
for(i=0;i<8;i++)
{
gotoxy(11,i+4);
if(i==y-4)
{
textbackground(GREEN);
textcolor(WHITE);
}
else
{
textbackground(BLUE);
textcolor(WHITE);
}
cputs(cf[i]);
}
key=bioskey(0);
switch(key)
{
case UP:
y=(y==4)?11:y-1;
break;
case DOWN:
y=(y==11)?4:y+1;
break;
case ENTER:
if(y==11)
exit(0);
else
{
clrscr();
switch(y)
{
case 4:newfile();break;
case 5:append();break;
case 6:modify();break;
case 7:deleted();break;
case 8:search();break;
case 9:tongji();break;
case 10:print();break;
case 11:exit(1);break;
}
}
getch();
break;
case ESC:
exit(0);
break;
}
}
}
void newfile()
{
int sle;
FILE *fp;
scanf("%d",&sle);
switch(sle)
{
case 1:
if((fp=fopen("stu_data.txt","wb+"))!=NULL) printf("新建成功!");
n=0;
return;
case 2:
loadfile();return;
case 0:
return;
default:
printf("输入错误,请重新输入!");
}
fclose(fp);
}
void loadfile()
{
FILE *fp;
int i=0;
if(n!=-1)
{
printf("\n\t文件已经导入。.\n\t按任意键继续");getch();return;
}
if((fp=fopen("stu_data","rb"))==NULL)
{printf("\n\n打不开文件!");n=-1;getch();return;}
while(fread(&stu[i],sizeof(struct student),1,fp)==1) i++;
n=i;
printf("\n\n导入结束,共导入%d个学生数据。\n\t按任意键继续",i);
fclose(fp);
getch();return;
}
void savefile()
{
int i;
FILE *fp;
fp=fopen("stu_data","rb+");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
printf("\n\t存盘成功,按任意键继续");
fclose(fp);
}
void append()
{
int i,j,k;char c;
loadfile();
printf("请输入你要添加的学生记录个数:");scanf("%d",&k);
for(i=n;i<n+k;i++)
{
clrscr();
printf("请输入第%d个学生数据:\n",i-n+1);
printf("学号:");scanf("%s",stu[i].number);
printf("姓名:");scanf("%s",stu[i].name);
printf("班级:");scanf("%s",stu[i].class1);
printf("%d门课的成绩:\n",N);
for(j=0;j<N;j++)
{printf("%s:",kemu[j]);scanf("%d",&stu[i].score[j]);}
}
printf("\n\t添加完毕,现在学生信息库中共有%d条记录.\n\t",n+k);
n+=k;
getch();
savefile();
return;
}
void modify()
{
char num[11];
char sele,sele2;
int a[N];
int i,j;
clrscr();
loadfile();
printf("请输入学号:");
scanf("%s",num);
for(i=0;i<n;i++) if(strcmp(stu[i].number,num)==0)break;
if(i==0) printf("没有此学号");
else
{
printf("学号: %s姓名:%s班级:%s",stu[i].number,stu[i].name,stu[i].class1);
for(j=0;j<N;j++)printf("%s:%4d",kemu[j],stu[i].score[j]);
printf("\n请输入%d门课程的新成绩:\n",N);
for(j=0;j<N;j++) scanf("%d",&a[j]);
printf("\n确实要修改这个学生的成绩吗?(Y/N)");
scanf("%c%c",&sele2,&sele);
if(sele=='Y'||sele=='y')
{
for(j=0;j<N;j++) stu[i].score[j]=a[j];
printf("\n\t修改完毕.");
}
else printf("\n\t没有修改");
}
getch();
savefile();
return;
}
void deleted()
{
char num[11];
int i,j;
char sele;
clrscr();
loadfile();
printf("\n\t请输入你要删除的学生的学号:");scanf("%s",num);
for(i=0;i<n;i++) if(strcmp(stu[i].number,num)==0) break;
if(i==n) printf("\t没有此学号.");
else
{
printf("学号:%s 姓名:%s 班级:%s",stu[i].number,stu[i].name,stu[i].class1);
printf("\n确实要删除这个学生的数据吗?(Y/N):");
scanf("%c%c",&sele,&sele);
if(sele=='Y'||sele=='y')
{
for(j=i+1;j<n;j++)
stu[j-1]=stu[j];
n--;
printf("\n\t删除完毕,现在共有%d个数据:\n",n);
}
}
getch();
savefile();
return;
}
void search()
{
int sle;
char name[11];
int i,j,count=0,sum=0;
struct student *p;
clrscr();
while(1)
{
clrscr();
gotoxy(30,4);
gotoxy(30,6);printf("1:按姓名查询学生成绩");
gotoxy(30,12);printf("其他: 返回");
gotoxy(30,14);printf("请输入:");
scanf("%d",&sle);
if(sle!=1) return;
else
{
printf(" 请输入你要查询的学生姓名:");
scanf("%s",name);
for(p=stu;p<stu+n;p++)
{
if(strcmp(p->name,name)==0)
{
count++;
if(count==1)
{
printf(" 学号 姓名 班级");
for(j=0;j<N;j++)
printf("%6s",kemu[j]);
printf("总分");printf("\n");
for(j=0;j<78;j++) printf("-");printf("\n");
}
printf("%-7s%-7s%-10s",stu[p-stu].number,stu[p-stu].name,stu[p-stu].class1);
for(j=0;j<N;j++)
{
printf("%6d",stu[p-stu].score[j]);
sum+=stu[p-stu].score[j];
}
printf("%6d",sum);
printf("\n");
}
}
if(count==0) printf("\n\t对不起,没有相符的记录!");
else { printf("\n\t共找到%d个记录。",count);}
printf("\n\t按任意键返回");
getch();
}
}
}
void tongji()
{
int sle;
int sc[N];
int i,j;
clrscr();
loadfile();
while(1)
{
clrscr();
gotoxy(30,10);printf("1:统计各门课程及格的人数");
gotoxy(30,12);printf("其他-返回");
gotoxy(30,14);printf("请输入你的选择(1或其他):");
scanf("%d",&sle);
if(sle!=1)
return;
else
{
for(i=0;i<N;i++) sc[i]=0;
for(j=0;j<N;j++)
for(i=0;i<n;i++) if(stu[i].score[j]>=60) sc[j]++;
gotoxy(30,5);printf(" 课程 及格人数");
gotoxy(30,6);printf("--------------------------");
for(i=0;i<N;i++)
{ gotoxy(30,7+i);printf("%s %12d",kemu[i],sc[i]);}
gotoxy(30,16);printf("按任意键返回"); getch();
}
}
}
void print()
{
int i,j,k;
int sle;
int sum1,sum2;
struct student temp;
clrscr();
loadfile();
while(1)
{
clrscr();
gotoxy(30,4);printf("学生成绩输出");
gotoxy(30,6);printf("1-按学号顺序输出学生信息");
gotoxy(30,8);printf("2-按总分顺序输出学生信息");
gotoxy(30,16);printf("0-返回");
gotoxy(30,18);printf("请输入你的选择(0--2):");
scanf("%d",&sle);
switch(sle)
{
case 1:
{
for(i=0;i<n-1;i++)
{
k=i;
for(j=i;j<n;j++)
if(strcmp(stu[j].number,stu[k].number)<0) k=j;
if(k!=i) {temp=stu[i];stu[i]=stu[k];stu[k]=temp;}
}
printall();
break;
}
case 2:
{
printf("打开 ok");
for(i=0;i<n-1;i++)
{
k=i;
for(j=0;j<n-1-i;j++)
{
for(k=0,sum1=0;k<N;k++)
sum1+=stu[j].score[k];
for(k=0,sum2=0;k<N;k++)
sum2+=stu[j+1].score[k];
if(sum1>sum2) {temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}
}
}
printall();
}
case 0:return;
default:printf("输入错误,请重新输入!");
getch();
}
}
}
void printall()
{
int i,j,sum=0;
for(i=0;i<n;i++)
{
if(i%20==0)
{
clrscr();
printf(" 学号 姓名 班级");
for(j=0;j<N;j++) printf("%8s",kemu[j]);
printf(" 总分");
printf("\n");
for(j=0;j<78;j++) printf("-");
printf("\n");
}
printf("%-7s%-7s\t%-10s%",stu[i].number,stu[i].name,stu[i].class1);
for(j=0,sum=0;j<N;j++)
{
printf("8%d",stu[i].score[j]);
sum+=stu[i].score[j];
}
printf("%8d",sum);
printf("\n");
if((i+1)%20==0||i==n-1)
{
gotoxy(10,25);printf("按任意键返回");
getch();
}
}
}
怎么改动 void newfile让创建文件能往下操作。在tc中! |
上一篇: 程序服务启动(有偿)下一篇: Win32、MFC、数据库、Linux、嵌入式、数据结构、传智播客、潭州、STL、Opencv、算...
|