/*引入頭文件*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100 /*定義學生人數*/
#define MAXSUB 4 /*定義課程數目*/
int length; /*定義學生的實際人數*/
/*定義學生結構體*/
typedef struct tagStudent_t
{
char no[11]; /*學號*/
char name[20]; /*姓名*/
int score[MAXSUB];/*各科成績*/
int sum; /*總分*/
float average; /*平均分*/
}Student;
/*函數聲明(有分號,定義沒有)*/
char menu_select();
void input(Student stuArray[]);
void output(Student stuArr[]);
void search(Student stuAray[]);
int searchByNo(Student stuArr[]);
void searchByName(Student stuArr[]);
void update(Student stuArray[]);
void delete(Student stuArray[]);
/*此程序的指責為程序的入口,主函數 */
void main()
{
Student stus[MAXSIZE];
while(1)
{
switch(menu_select())
{
case '1':
input(stus);
break;
case '2':
update(stus);
printf("按任意鍵繼續…");
fflush(stdin);
getchar();
break;
case '3':
search(stus);
printf("按任意鍵繼續…");
fflush(stdin);
getchar();
break;
case '4':
delete(stus);
printf("按任意鍵繼續…");
fflush(stdin);
getchar();
break;
case '5':
output(stus);
printf("按任意鍵繼續…");
fflush(stdin);
getchar();
break;
case '0':
printf("\n 謝謝使用!\n");
exit(0);
}
}
}
/*此程序的指責為各函數的定義*/
/*菜單選擇*/
char menu_select()
{
char MenuItem;
printf("\n ");
printf(" | *********學生成績管理系統********* | \n");
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(" | 0 --- 退出系統 | \n");
do
{
printf("\n 請輸入選項(0-5):");
fflush(stdin);
scanf("%c",&MenuItem);
getchar();
}while(MenuItem<'0'||MenuItem>'5');
return MenuItem;
}
/**********************************************
輸入學生信息
***********************************************/
void input(Student stuArray[])
{
int i,j,k;
char cContinue;
int flag=1;
fflush(stdin);
for(i=length;i<MAXSIZE-1;i++)
{
printf("請輸入第%d名學生的學號:",i+1);
scanf("%s",&stuArray[i].no);
if(i>0)
{
for(k=0;k<length;k++)
if(strcmp(stuArray[k].no,stuArray[i].no)==0)
break;
if(k<length)
{
i--;
printf("學號不能重復,請重新輸入!");
continue;
}
}
printf("請輸入姓名:");
scanf("%s",&stuArray[i].name);
for(j=0;j<MAXSUB;j++)
{
printf("請輸入第%d門成績:",j+1);
scanf("%d",&stuArray[i].score[j]);
if(stuArray[i].score[j]>100||stuArray[i].score[j]<0)
{
printf("錯誤數據,請重新輸入!");
j--;
}
}
stuArray[i].sum=0;
for(j=0;j<MAXSUB;j++)
stuArray[i].sum+=stuArray[i].score[j];
stuArray[i].average=(float)stuArray[i].sum/MAXSUB;
length++;
do
{
flag=1;
fflush(stdin);
printf("需要繼續錄入嗎?(Y/N)");
scanf("%c",&cContinue);
getchar();
switch(cContinue)
{
case 'Y':
case 'y':
flag=0;
break;
case 'N':
case 'n':
return;
}
}while(flag);
}
}
/**********************************************
*Function Name:output
*Description:輸出學生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void output(Student stuArray[])
{
int i,j;
printf("| 學號 | 姓名 | 成績1 | 成績2 | 成績3 | 成績4 | 總分 | 平均分 |\n");
printf("|------|--------------|-------|-------|-------|-------|------|--------|\n");
for(i=0;i<length;i++)
{
printf("|%-6s|%-14s|", stuArray[i].no,stuArray[i].name);
for(j=0;j<MAXSUB;j++)
printf("%7d|", stuArray[i].score[j]);
printf("%7d%7.2f\n",stuArray[i].sum, stuArray[i].average); /*輸出數組中當前學生的信息*/
}
}
/**********************************************
*Function Name:search
*Description:查詢學生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void search(Student stuArray[])
{
char menuItem;
printf("\n\n\n"); /*輸出三個空行*/
/*---------輸出菜單界面開始-----------*/
printf(" | --------------------------------------------|\n");
printf(" | 查詢子菜單項 |\n");
printf(" | --------------------------------------------|\n");
printf(" | 1---學號查詢 |\n");
printf(" | 2---姓名查詢 |\n");
printf(" | 0---返回主菜單 |\n");
printf(" | --------------------------------------------|\n");
/*----------菜單界面輸出結束-----------*/
do
{
printf("\n 請輸入菜單項數字(0~2):");
fflush(stdin);
scanf("%c",&menuItem);
getchar();
}while(menuItem<'0'||menuItem>'2');
switch(menuItem)
{
case '1':
searchByNo(stuArray);
break;
case '2':
searchByName(stuArray);
break;
}
return;
}
/**********************************************
*Function Name:searchByNo
*Description:按學號查詢學生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
int searchByNo(Student stuArray[])
{
char no[20];
int i;
printf("\n請輸入學生的學號:");
scanf("%s",no);
for(i=0;i<length;i++)
if(strcmp(stuArray[i].no,no)==0)
break;
if(i==length)
printf("您輸入的學號不存在!\n");
else
{
printf("| 學號 | 姓名 | 成績1 | 成績2 | 成績3 | 成績4 | 總分 | 平均分 |\n");
printf("|------|--------------|-------|-------|-------|-------|------|--------|\n");
printf("|%-6s|%-14s|%7d|%7d|%7d|%7d|%7d|%7.2f|\n", stuArray[i].no,stuArray[i].name,
stuArray[i].score[0], stuArray[i].score[1], stuArray[i].score[2], stuArray[i].score[3],
stuArray[i].sum, stuArray[i].average); /*輸出數組中當前學生的信息*/
}
return i;
}
/**********************************************
*Function Name:searchByName
*Description:按姓名查詢學生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void searchByName(Student stuArray[])
{
Student stu[10];
char searchName[20];
int i,j,k;
printf("\n請輸入要查詢學生的姓名:");
scanf("%s",searchName);
for(i=0,j=0;i<length;i++)
if(strcmp(stuArray[i].name,searchName)==0)
{
strcpy(stu[j].no,stuArray[i].no);
strcpy(stu[j].name,searchName);
for(k=0;k<4;k++)
stu[j].score[k]=stuArray[i].score[k];
stu[j].sum=stuArray[i].sum;
stu[j].average=stuArray[i].average;
j++;
}
if(j==0)
printf("您輸入的姓名不存在!\n");
else
{
printf("| 學號 | 姓名 | 成績1 | 成績2 | 成績3 | 成績4 | 總分 | 平均分 |\n");
printf("|------|--------------|-------|-------|-------|-------|------|--------|\n");
for(i=0;i<j;i++)
printf("|%-6s|%-14s|%7d|%7d|%7d|%7d|%7d|%7.2f|\n", stu[i].no,stu[i].name,
stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3],
stu[i].sum, stu[i].average); /*輸出數組中當前學生的信息*/
}
}
/**********************************************
*Function Name:update
*Description:修改學生信息
*parameter:stuArray[MAXSIZE]
*Date:07/11/28
*Author:Wen He
***********************************************/
void update(Student stuArray[])
{
char answer;
int i,j;
i=searchByNo(stuArray);
if(i<length)
{
do
{
printf("您要修改的是以上記錄嗎?(Y/N)");
fflush(stdin);
scanf("%c",&answer);
getchar();
}while(answer!='Y'&&answer!='N'&&answer!='y'&&answer!='n');
if(answer=='Y'||answer=='y')
{
printf("請輸入姓名:");
scanf("%s",stuArray[i].name);
stuArray[i].sum=0;
for(j=0;j<MAXSUB;j++)
{
printf("請輸入第%d門課程的成績:",j+1);
scanf("%d",&stuArray[i].score[j]);
stuArray[i].sum+=stuArray[i].score[j];
}
stuArray[i].average=(float)stuArray[i].sum/MAXSUB;
printf("您修改後的信息如下:\n");
printf("| 學號 | 姓名 | 成績1 | 成績2 | 成績3 | 成績4 | 總分 | 平均分 |\n");
printf("|------|--------------|-------|-------|-------|-------|------|--------|\n");
printf("|%-6s|%-14s|%7d|%7d|%7d|%7d|%7d|%7.2f|\n", stuArray[i].no,stuArray[i].name,
stuArray[i].score[0], stuArray[i].score[1], stuArray[i].score[2], stuArray[i].score[3],
stuArray[i].sum, stuArray[i].average); /*輸出數組中當前學生的信息*/
}
}
}
/**********************************************
*Function Name:delete
*Description:刪除學生信息
*Date:07/11/28
*parameter:stuArray[MAXSIZE]
*Author:Wen He
***********************************************/
void delete(Student stuArray[])
{
char answer;
int i,j;
i=searchByNo(stuArray);
if(i<length)
{
do
{
printf("您要刪除的是以上記錄嗎?(Y/N)");
fflush(stdin);
scanf("%c",&answer);
getchar();
}while(answer!='Y'&&answer!='N'&&answer!='y'&&answer!='n');
if(answer=='Y'||answer=='y')
{
for(j=i;j<=length-1;j++)
stuArray[j]=stuArray[j+1];
printf("刪除成功!");
length--;
}
}
}