#include"string.h"
#include"windows.h"
#include"stdio.h"
#include"conio.h"
#define N 10
#define M 3
struct student
{
int num;
char name[15];
int score[M];
float avg;
};
int count;
int sort_type=0;
int n=-1;
struct student stu[N];
void quit();
void waiting();
void sort();
void del();
void input();
void display();
void homepage();
void modify();
void loadfile();
void newfile();
int main()
{
int i,k=0;
char username[15],pwd[6];
printf("\n\n");
printf(" \t####################################\n");
printf(" \t# #\n");
printf(" \t# 歡迎使用學生管理系統 #\n");
printf(" \t# #\n");
printf(" \t# 2020.6.24 #\n");
printf(" \t# #\n");
printf(" \t####################################\n");
for(i=0;i<3;i++)
{
printf("\n請輸入用戶名:");
gets(username);
printf("\n請輸入六位密碼:");
gets(pwd);
if((strcmp(username,"Xty")==0)&&(strcmp(pwd,"777777")==0))
{
printf("\n 您已經成功登入\n");
k=1;
for(i=0;i<20;i++)
{
printf(".");
Sleep(100);
}
system("cls");
homepage();
break;
}
else
printf("\n用戶名或密碼無效 請重新輸入\n");
continue;
}
if(k==0)
printf("\n連續輸入錯誤3次 將退出程式\n");
Sleep(2000);
quit();
return 0;
}
void homepage()
{
char n;
printf("\n\n");
printf(" \t###################################\n");
printf(" \t# #\n");
printf(" \t# 1.顯示成績 #\n");
printf(" \t# #\n");
printf(" \t# 2.錄入成績 #\n");
printf(" \t# #\n");
printf(" \t# 3.洗掉記錄 #\n");
printf(" \t# #\n");
printf(" \t# 4.排序 #\n");
printf(" \t# #\n");
printf(" \t# 5.修改成績 #\n");
printf(" \t# #\n");
printf(" \t# 0.退出 #\n");
printf(" \t# #\n");
printf(" \t###################################\n");
while((n!='1')&&(n!='2')&&(n!='3')&&(n!='4')&&(n!='5')&&(n!='6')&&(n!='0'))
{
printf("\n請選擇:");
fflush(stdin);
scanf("%c",&n);
switch(n)
{
case '1':display();
system("pause");
break;
case '2':if(count<N)
input();
else
{
printf("記錄已滿\n");
Sleep(2000);
system("cls");
homepage();
}
case '3':del();
break;
case '4':sort();
break;
case '5':modify();
break;
case '6':newfile();
break;
case '0':quit();
break;
default:printf("\n選項錯誤\n");
}
}
}
void loadfile()
{
FILE *fp;
int i=0;
if(n!=-1)
{
printf("\n\t檔案已經匯入.\n\t按任意鍵繼續");
}
if((fp=fopen("stu_data.txt","rb"))==NULL)
{
printf("\n\t打不開檔案!");
n=-1;
}
while(fread(&stu[i],sizeof(struct student),1,fp)==1)
i++;
n=i;
printf("\n\t匯入結束,共匯入%d個學生資料.\n\t按任意鍵繼續",i);
fclose(fp);
return;
}
void newfile()
{
int sle;
FILE *fp;
printf("檔案選項\n");
printf("1-新建檔案\n");
printf("2-匯入檔案\n");
printf("0-回傳\n");
printf("請輸入:\n");
scanf("%d",&sle);
switch(sle)
{
case 1:
if((fp=fopen("stu_data.txt","wb+"))!=NULL) printf("新建成功!");
n=0;
system("cls");
homepage();
case 2:
loadfile();
system("cls");
homepage();
case 0:
system("cls");
homepage();
default:
printf("輸入錯誤,請重新輸入!");
}
fclose(fp);
}
void display()
{
int i,j;
loadfile();
system("cls");
switch(sort_type)
{
case 0:printf("\t\t未排序\n\n");
break;
case 1:printf("\t\t按學號排序:\n\n");
break;
case 2:printf("\t\t按成績1排序:\n\n");
break;
case 3:printf("\t\t按成績2排序:\n\n");
break;
case 4:printf("\t\t按成績3排序:\n\n");
break;
case 5:printf("\t\t按平均成績排序:\n\n");
}
printf("\t學號\t姓名\t成績1\t成績2\t成績3\t平均成績\n");
for(i=0;i<count;i++)
{
printf("\t%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<M;j++)
printf("\t%3d",stu[i].score[j]);
printf("\t%5.2f\n",stu[i].avg);
}
system("pause");
system("cls");
homepage();
}
void input()
{
int i,numcheck;
float s;
char c;
loadfile();
system("cls");
do
{
printf("學號:\n");
scanf("%d",&stu[count].num);
numcheck=1;
if(stu[count].num<0)
{
printf("你要知道你必須要輸入正確的數!\n再次輸入:\n");
numcheck=0;
}
for(i=0;i<count;i++)
{
if(stu[count].num==stu[i].num)
{
numcheck=0;
printf("學號重復啦,你要知道學號是唯一,再次輸入:\n");
}
}
}
while(!numcheck);
printf("姓名:\n");
fflush(stdin);
gets(stu[count].name);
s=0;
fflush(stdin);
for(i=0;i<M;i++)
{
printf("第%d門課成績:\n",i+1);
scanf("%d",&stu[count].score[i]);
s+=stu[count].score[i];
}
stu[count].avg=s/M;
count++;
FILE *fp;
fp=fopen("stu_data.txt","w");
fprintf(fp,"%d\t",stu[i].num);
fprintf(fp,"%s\t",stu[i].name);
fprintf(fp,"%d\t",stu[i].score[0]);
fprintf(fp,"%d\t",stu[i].score[1]);
fprintf(fp,"%d\t",stu[i].score[2]);
fprintf(fp,"%d\t",stu[i].avg);
fclose(fp);
printf("是否繼續輸入(y/n):\n");
do
{
fflush(stdin);
c=getchar();
if(c=='y'||c=='Y')
{
if(count<10)
input();
else
{
printf("記錄已滿\n");
Sleep(2000);
system("cls");
homepage();
}
}
else if(c=='n'||c=='N')
{
system("cls");
homepage();
break;
}
else
{
printf("叫你輸入'是否'吶,重新輸入:\n");
}
}
while((c!='y')&&(c!='n')&&(c!='Y')&&(c!='N'));
}
void del()
{
int i,j,del_num,match=0;
char c;
system("cls");
loadfile();
printf("請輸入要洗掉的學生學號:\n");
scanf("%d",&del_num);
waiting();
for(i=0;i<count;i++)
{
if(stu[i].num==del_num)
{
match=1;
for(j=i;j<count;j++)
stu[j]=stu[j+1];
count--;
}
}
display();
if(!match) printf("沒有要找的學生號.\n");
printf("是否繼續洗掉?(y/n)");
fflush(stdin);
do
{
c=getchar();
if(c=='y'||c=='Y')
{
count--;
del();
}
else if(c=='n'||c=='N')
{
system("cls");
homepage();
break;
}
else printf("無法識別標志符\n");
}
while((c!='y')&&(c!='n'));
}
void sort()
{
int i,j;
int choice;
struct student temp;
loadfile();
system("cls");
printf("\t\t請選擇排序功能:\n");
printf("\t1.按學號排序\n");
printf("\t2.按成績1排序\n");
printf("\t3.按成績2排序\n");
printf("\t4.按成績3排序\n");
printf("\t5.按平均成績排序\n");
fflush(stdin);
do
{
scanf("%d",&choice);
}
while((choice!=1)&&(choice!=2)&&(choice!=3)&&(choice!=4)&&(choice!=5));
switch(choice)
{
case 1:
for(i=0;i<count;i++)
{
for(j=0;j<count;j++)
{
if(stu[i].num>stu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
sort_type=1;
break;
case 2:
for(i=0;i<count;i++)
{
for(j=0;j<count;j++)
{
if(stu[i].score[0]>stu[j].score[0])
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
sort_type=2;
break;
case 3:
for(i=0;i<count;i++)
{
for(j=0;j<count-1;j++)
{
if(stu[i].score[1]>stu[j].score[1])
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
sort_type=3;
break;
case 4:
for(i=0;i<count;i++)
{
for(j=0;j<count;j++)
{
if(stu[i].score[2]>stu[j].score[2])
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
sort_type=4;
break;
case 5:
for(i=0;i<count;i++)
{
for(j=0;j<count;j++)
{
if(stu[i].avg>stu[j].avg)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
sort_type=5;
break;
}
system("cls");
waiting();
display();
homepage();
}
void modify()
{
int i,j,a;
float s;
loadfile();
system("cls");
printf("請輸入學號\n");
scanf("%d",&a);
for(i=0;i<count;i++)
{
if(stu[i].num==a)
{
printf("\t學號\t姓名\t成績1\t成績2\t成績3\t平均成績\n");
printf("\t%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<M;j++)
printf("\t%3d",stu[i].score[j]);
printf("\t%5.2f\n",stu[i].avg);
printf("\n");
printf("請輸入成績1\n");
scanf("%d",&stu[i].score[0]);
printf("請輸入成績2\n");
scanf("%d",&stu[i].score[1]);
printf("請輸入成績3\n");
scanf("%d",&stu[i].score[2]);
s=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].avg=s/(float)M;
}
}
system("cls");
display();
homepage();
}
void waiting()
{
int i;
printf("\n..\t請稍侯.....");
for(i=0;i<25;i++)
{
switch(i%4)
{
case 1:printf("\b\\");break;
case 2:printf("\b");break;
case 3:printf("\b/");break;
case 0:printf("\b|");break;
}
Sleep(1);
}
system("cls");
}
void quit()
{
system("cls");
printf("\n\n");
printf(" \t####################################\n");
printf(" \t# #\n");
printf(" \t# 謝謝使用 #\n");
printf(" \t# #\n");
printf(" \t####################################\n\n");
exit(0);
}
這個程式需要怎么改能夠讓第一次輸入的成績可以在關閉程式后第二次使用,感謝回答~~
uj5u.com熱心網友回復:
關閉程式前保存到檔案,打開程式先讀取檔案,如果檔案為空然后再輸入uj5u.com熱心網友回復:
只能找個檔案存盤上次使用產生的資料,再取讀使用uj5u.com熱心網友回復:
好的,感謝
uj5u.com熱心網友回復:
嗯嗯,謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/34197.html
標籤:C語言
上一篇:大一小白
下一篇:請大家再給我一天時間~
