#include<stdio.h> /*I/O函式*/
#include<stdlib.h> /*其它說明*/
#include<string.h> /*字串函式*/
#define LEN 15 /* 學號和姓名最大字元數,實際請更改*/
#define N 50 /* 最大學生人數,實際請更改*/
struct Student
{
char code[LEN];
char name[LEN];
int age;
char sex[3];
float score[3];
}Stud[N];
int k=1,n=0, m=0;
void seek();
void modify();
void insert();
void del();
void outfile();
void freshen();
void display();
void menu();
int main()
{
while(k)
{
menu();
}
system("pause");
return 0;
}
void outfile()
{
int i;
FILE *fp;
fp=fopen("Studdent.txt","w");
for(i=0;i<n;i++)
{
fprintf(fp,"%7s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,Stud[i].name,Stud[i].age,
Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
}
fclose(fp);
}
void help()
{
printf("\n0.歡迎使用系統幫助!\n");
printf("\n1.初次進入系統後,請先選擇增加學生資訊;\n");
printf("\n2.按照選單提示鍵入數字代號;\n");
printf("\n3.增加學生資訊後,切記儲存;\n");
printf("\n4.謝謝您的使用!\n");
}
void seek()
{
int i,item,flag;
char s1[21];
printf("------------------\n");
printf("-----1.按學號查詢-----\n");
printf("-----2.按姓名查詢-----\n");
printf("-----3.退出本選單-----\n");
printf("------------------\n");
while(1)
{
printf("請選擇子選單編號:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("請輸入要查詢的學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(Stud[i].code,s1)==0)
{
flag=1;
printf("學生學號 學生姓名 年齡 性別 C語言成績 高等數學 大學英語成績\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,Stud[i].name,Stud[i].age,
Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
}
if(0==flag)
printf("該學號不存在!\n"); break;
case 2:
printf("請輸入要查詢的學生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(Stud[i].name,s1)==0)
{
flag=1;
printf("學生學號 學生姓名 年齡 性別 C語言成績 高等數學 大學英語成績\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,Stud[i].name,Stud[i].age,
Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
}
if(0==flag)
printf("該姓名不存在!\n"); break;
case 3:return;
default:printf("請在1-3之間選擇\n");
}
}
}
void modify()
{
int i,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1];
float score1;
printf("請輸入要要修改的學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(Stud[i].code,s1)==0)
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年齡\n");
printf("3.修改性別\n");
printf("4.修改C語言成績\n");
printf("5.修改高等數學成績\n");
printf("6.修改大學英語成績\n");
printf("7.退出本選單\n");
printf("------------------\n");
while(1)
{
printf("請選擇子選單編號:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("請輸入新的姓名:\n");
scanf("%s",s2);
strcpy(Stud[num].name,s2); break;
case 2:
printf("請輸入新的年齡:\n");
scanf("%d",Stud[num].age);break;
case 3:
printf("請輸入新的性別:\n");
scanf("%c",&sex1);
strcpy(Stud[num].sex,sex1); break;
case 4:
printf("請輸入新的C語言成績:\n");
scanf("%f",&score1);
Stud[num].score[0]=score1; break;
case 5:
printf("請輸入新的高等數學成績:\n");
scanf("%f",&score1);
Stud[num].score[1]=score1; break;
case 6:
printf("請輸入新的大學英語成績:\n");
scanf("%f",&score1);
Stud[num].score[2]=score1; break;
case 7: return;
default:printf("請在1-7之間選擇\n");
}
}
}
void sort()
{
int i,j,k,*p,*q,s;
char temp[LEN+1];
float ftemp;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
if(strcmp(Stud[j-1].code,Stud[j].code)>0)
{
strcpy(temp,Stud[j-1].code);
strcpy(Stud[j-1].code,Stud[j].code);
strcpy(Stud[j].code,temp);
strcpy(temp,Stud[j-1].name);
strcpy(Stud[j-1].name,Stud[j].name);
strcpy(Stud[j].name,temp);
strcpy(temp,Stud[j-1].sex);
strcpy(Stud[j].sex,temp);
p=&Stud[j-1].age;
q=&Stud[j].age;
s=*q;
*q=*p;
*p=s;
for(k=0;k<3;k++)
{
ftemp=Stud[j-1].score[k];
Stud[j-1].score[k]=Stud[j].score[k];
Stud[j].score[k]=ftemp;
}
}
}
}
void insert()
{
int j=n;
printf("請輸入待增加的學生數:\n");
scanf("%d",&m);
do
{
printf("請輸入第%d 個學生的學號:\n",j-n+1);
scanf("%s",Stud[j].code);
printf("請輸入第%d 個學生的姓名:\n",j-n+1);
scanf("%s",Stud[j].name);
printf("請輸入第%d 個學生的年齡:\n",j-n+1);
scanf("%d",&Stud[j].age);
printf("請輸入第%d 個學生的性別:\n",j-n+1);
scanf(" %s",&Stud[j].sex);
printf("請輸入第%d 個學生的C語言成績\n",j-n+1);
scanf("%f",&Stud[j].score[0]);
printf("請輸入第%d 個學生的高等數學成績:\n",j-n+1);
scanf("%f",&Stud[j].score[1]);
printf("請輸入第%d 個學生的大學英語成績:\n",j-n+1);
scanf("%f",&Stud[j].score[2]);
j++;
}while(j<n+m);
n+=m;
printf("資訊增加完畢!\n\n");
sort();
}
void del()
{
int i,j,flag=0;
char s1[LEN+1];
printf("請輸入要刪除學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(Stud[i].code,s1)==0)
{
flag=1;
for(j=i;j<n-1;j++)
Stud[j]=Stud[j+1];
}
if(flag==0)
printf("該學號不存在!\n");
if(flag==1)
{
printf("刪除成功,顯示結果請選擇選單\n");
n--;
}
}
void display()
{
int i;
printf("共有%d位學生的資訊:\n",n);
if(0!=n)
{
printf("學生學號 學生姓名 年齡 性別 C語言成績 高等數學 大學英語成績\n");
printf("--------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%7s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,
Stud[i].name,Stud[i].age,Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
}
}
}
void freshen()
{
}
void menu()
{
int num;
printf(" \n\n \n\n");
printf(" ******************************************************\n\n");
printf(" * 學生資訊管理系統 *\n \n");
printf(" ******************************************************\n\n");
printf("*********************系統功能選單************************* \n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" * 0.系統幫助及說明 * * 1.重新整理學生資訊 * \n");
printf(" ********************************************* \n");
printf(" * 2.查詢學生資訊 * * 3.修改學生資訊 * \n");
printf(" ********************************************* \n");
printf(" * 4.增加學生資訊 * * 5.按學號刪除資訊 * \n");
printf(" ********************************************* \n");
printf(" * 6.顯示當前資訊 * * 7.儲存當前學生資訊* \n");
printf(" ********************** ********************** \n");
printf(" * 8.退出系統 * \n");
printf(" ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("請選擇選單編號:");
scanf("%d",&num);
switch(num)
{
case 0:help();break;
case 1:freshen();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:outfile();break;
case 8:k=0;break;
default:printf("請在0-8之間選擇\n");
}
}