# include & ltstdio.h & gt/*參考庫函數*/
# include & ltstdlib.h & gt
# include & ltctype.h & gt
# include & ltstring.h & gt
Typedef struct /*定義結構數組*/
{
字符編號[10];/*學生ID */
char name[20];/*姓名*/
int分數;/*成就*/
}學生;
學生stu[80];/*結構數組變量*/
Int menu_select() /*菜單函數*/
{
char c;
做{
系統(“cls”);/*運行之前清除屏幕*/
printf(" \ t \ t * * * *學生成績管理系統* * * * \ n ");/*菜單選擇*/
printf("\t\t | 1。輸入記錄| \ n ");
printf("\t\t | 2。顯示所有記錄| \ n ");
printf("\t\t | 3。sort | \ n ");
printf("\t\t | 4。插入記錄| \ n ");
printf("\t\t | 5。刪除記錄| \ n ");
printf("\t\t | 6。query | \ n ");
printf("\t\t | 7。統計| \ n ");
printf("\t\t | 8。從文本文件添加記錄| \ n ");
printf("\t\t | 9。寫入文本文件| \ n ");
printf("\t\t | 0。退出| \ n ");
printf(" \ t \ t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
printf(" \ t \ t \ t給出您的選擇(0-9):");
c = getchar();/*閱讀選擇*/
} while(c & lt;0 ' | | c & gt'9');
return(c-' 0 ');/*返回選擇*/
}
Intinput (student study [],int n)/*輸入幾條記錄*/
{ int I = 0;
字符符號,x[10];/*x[10]用於清除冗余數據*/
而(簽!= ' n ' & amp& amp簽字!='N') /*判斷*/
{ printf(" \ t \ t \ t學生編號:");/*交互式輸入*/
scanf("\t\t\t%s ",stud[n+i]。num);
printf(" \ t \ t \ t學生姓名:");
scanf("\t\t\t%s ",stud[n+i]。姓名);
printf(" \ t \ t \ t學生的分數:");
scanf("\t\t\t%d ",& ampstud[n+i]。分數);
獲取(x);/*清除冗余輸入*/
printf(" \ t \ t \ t是否有更多記錄?(Y/N)");
scanf("\t\t\t%c ",& amp簽字);/*輸入判斷*/
i++;
}
return(n+I);
}
Void display (student study [],int n)/*顯示所有記錄*/
{
int I;
printf(" \ t \ t \ t-\ n ");/*格式頭*/
printf(" \ t \ t \ t number name score \ n ");
printf(" \ t \ t \ t-\ n ");
for(I = 1;我& ltn+1;I++) /*循環輸入*/
{
printf(" \ t \ t \ t %-16s %-15s % d \ n ",stud[i-1]。編號,螺柱[識別號1]。名稱,螺柱[i-1]。分數);
如果(i & gt1。& ampI%10==0) /*每十次暫停*/
{ printf(" \ t \ t \ t-\ n ");/*格式*/
printf(" \ t \ t \ t ");
系統(“暫停”);
printf(" \ t \ t \ t-\ n ");
}
}
printf(" \ t \ t \ t ");
系統(“暫停”);
}
void Sort _ by _ num(study[],int n)/*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(I = 0;我& ltn-1;I++) /*冒泡排序*/
for(j = 0;j & ltn-1-I;j++)
if(strcmp(stud[j].編號,螺柱[j+1]。num)>0)
{strcpy(t,stud[j+1])。num);
strcpy(螺柱[j+1])。num,stud[j]。num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1])。姓名);
strcpy(螺柱[j+1])。姓名,螺柱[j]。姓名);
strcpy(stud[j].姓名,t);
p = & amp螺柱[j+1]。分數;
q = & amp螺柱[j]。分數;
s = * p;
* p = * q;
* q = s;
}
}
int Insert _ a _ record(studenttud[],int n)/*插入壹條記錄*/
{ char x[10];/*用於清除冗余輸入*/
printf(" \ t \ t \ t學生編號:");/*交互式輸入*/
scanf("\t\t\t%s ",stud[n]。num);
printf(" \ t \ t \ t學生姓名:");
scanf("\t\t\t%s ",stud[n]。姓名);
printf(" \ t \ t \ t學生的分數:");
scanf("\t\t\t%d ",& amp螺柱。分數);
獲取(x);
n++;
Sort_by_num(stud,n);/*呼叫排序功能*/
printf(" \ t \ t \ t插入成功!\ n ");/*返回成功信息*/
返回(n);
}
int delete _ a _ record(student stud[],int n)/*按名稱搜索並刪除壹條記錄*/
{ char s[20];
int i=0,j;
printf(" \ t \ t \ t告訴我他(她)的名字:");/*互動探索*/
scanf("%s ",s);
while(strcmp(stud[i].姓名,s)!= 0 & amp& amp我& ltn)i++;/*尋找並判斷*/
如果(i==n)
{ printf(" \ t \ t \ t找不到!\ n ");/*返回失敗信息*/
返回(n);
}
for(j = I;j & ltn-1;J++) /*刪除操作*/
{
strcpy(stud[j].編號,螺柱[j+1]。num);
strcpy(stud[j].名稱,螺柱[j+1]。姓名);
螺柱[j]。分數=stud[j+1]。分數;
}
printf(" \ t \ t \ t刪除成功!\ n ");/*返回成功信息*/
返回(n-1);
}
void query _ a _ record(studenttud[],int n)/*查找並顯示壹條記錄*/
{ char s[20];
int I = 0;
printf(" \ t \ t \ t輸入他(她)的姓名:");/*交互式輸入*/
scanf("\t\t\t%s ",s);
while(strcmp(stud[i].姓名,s)!= 0 & amp& amp我& ltn)i++;/*尋找並判斷*/
如果(i==n)
{ printf(" \ t \ t \ t找不到!\ n ");/*輸入失敗信息*/
返回;
}
printf(" \ t \ t \ this(her)number:% s \ n ",stud[i]。num);/*輸出學生信息*/
printf(" \ t \ t \ this(her)score:% d \ n ",stud[i]。分數);
}
Void statistical (student study [],int n)/*新函數,輸出統計信息*/
{ int i,j=0,k=0,sum = 0;
浮動aver/*平均分數*/
for(I = 0;我& ltn;I++) /*循環輸入判斷*/
{
sum+=stud[i]。分數;
if(stud[j].得分& gtstud[i]。得分)j = I;
if(stud[k].得分& ltstud[i]。得分)k = I;
}
aver = 1.0 * sum/n;
printf(" \ t \ t \ t有%d條記錄。\n”,n);/*總共* * *條記錄*/
printf(" \ t \ t \ t最高分:\ n ");/*最高分*/
printf(" \ t \ t \ t編號:%s名稱:%s分數:%d\n ",stud[j]。num,stud[j]。姓名,螺柱[j]。分數);
printf(" \ t \ t \ t最低分:\ n ");/*最低分數*/
printf(" \ t \ t \ t編號:%s名稱:%s分數:%d\n ",stud[k]。num,stud[k]。名字,螺柱[k]。分數);
printf(" \ t \ t \ t平均分數為%5.2f\n ",aver);/*平均分數*/
}
intaddfromtext(studenttud[],int n)/*從文件中讀取數據*/
{ int i=0,num
FILE * fp/*定義文件指針*/
字符文件名[20];/*定義文件名*/
printf(" \ t \ t \ t輸入文件名:");
scanf("\t\t\t%s ",文件名);/*輸入文件名*/
If ((FP = fopen (filename," Rb))= = null)/*打開文件*/
{ printf(" \ t \ t \ t無法打開文件\ n ");/*打開失敗消息*/
printf(" \ t \ t \ t ");
系統(“暫停”);
返回(n);
}
fscanf(fp," %d ",& ampnum);/*讀入總記錄*/
while(我& ltNum) /*循環讀取數據*/
{
fscanf(fp," %s%s%d ",stud[n+i]。num,stud[n+i]。姓名& ampstud[n+i]。分數);
i++;
}
n+= num;
fclose(FP);/*關閉文件*/
printf(" \ t \ t \ t成功!\ n ");
printf(" \ t \ t \ t ");
系統(“暫停”);
返回(n);
}
Void write to text (student stud [],int n)/*將所有記錄寫入文件*/
{
int I = 0;
FILE * fp/*定義文件指針*/
字符文件名[20];/*定義文件名*/
printf(" \ t \ t \ t將記錄寫入文本文件\ n ");/*輸入文件名*/
printf(" \ t \ t \ t輸入文件名:");
scanf("\t\t\t%s ",文件名);
If ((FP = fopen (filename," w)))= = null)/*打開文件*/
{
printf(" \ t \ t \ t無法打開文件\ n ");
系統(“暫停”);
返回;
}
fprintf(fp," %d\n ",n);/*循環寫入數據*/
while(我& ltn)
{
fprintf(fp," %-16s%-15s%d\n ",stud[i]。num,stud[i]。名字,種馬[i]。分數);
i++;
}
fclose(FP);/*關閉文件*/
printf("成功!\ n ");/*返回成功信息*/
}
Void main() /* main函數*/
{
int n = 0;
for(;;)
{
Switch(menu_select()) /*選擇判斷*/
{
案例1:
printf(" \ t \ t \ t輸入記錄\ n ");/*輸入幾條記錄*/
n =輸入(stu,n);
打破;
案例二:
printf(" \ t \ t \ t顯示所有記錄\ n ");/*顯示所有記錄*/
Display(stu,n);
打破;
案例三:
printf(" \ t \ t \ t sort \ n ");
Sort_by_num(stu,n);/*按學號排序*/
printf(" \ t \ t \ t排序成功!\ n ");
printf(" \ t \ t \ t ");
系統(“暫停”);
打破;
案例4:
printf(" \ t \ t \ t插入記錄\ n ");
n =插入_ a _記錄(stu,n);/*插入記錄*/
printf(" \ t \ t \ t ");
系統(“暫停”);
打破;
案例5:
printf(" \ t \ t \ t刪除記錄\ n ");
n=Delete_a_record(stu,n);/*按名稱搜索並刪除記錄*/
printf(" \ t \ t \ t ");
系統(“暫停”);
打破;
案例6:
printf(" \ t \ t \ t query \ n ");
Query_a_record(stu,n);/*查找並顯示記錄*/
printf(" \ t \ t \ t ");
系統(“暫停”);
打破;
案例7:
printf(" \ t \ t \ t statistic \ n ");
統計量(stu,n);/*新功能,輸出統計信息*/
printf(" \ t \ t \ t ");
系統(“暫停”);
打破;
案例8:
printf(" \ t \ t \ t從文本文件添加記錄\ n ");
n=AddfromText(stu,n);/*新功能,輸出統計信息*/
打破;
案例9:
printf(" \ t \ t \ t寫入文本文件\ n ");
WritetoText(stu,n);/*循環寫入數據*/
printf(" \ t \ t \ t ");
系統(“暫停”);
打破;
案例0:
祝妳好運,再見!\ n ");/*結束程序*/
printf(" \ t \ t \ t ");
系統(“暫停”);
退出(0);
}
}
}