根據課堂講授內容,學生做相應的自主練習,消化課堂所講解的內容;通過調試典型例題或習題積累調試C程序的經驗;通過完成輔導教材中的編程題,逐漸培養學生的編程能力、用計算機解決實際問題的能力。
二、課程設計基本要求
1、用數據結構的方法設計出的學生信息管理系統,能實現對學生信息的簡單管理。
2、具體要求:
建立壹個若幹學生的信息登記表,每個學生的信息包括:學號、姓名、性別、成績和系,建立壹個管理系統。
程序運行時顯示壹個菜單形式,例如
**********學生信息管理系統**********
| 1. 輸入信息 |
| 2. 顯示所有信息|
| 3. 信息按學號排序|
| 4. 插入壹條記錄|
| 5. 刪除壹條記錄|
| 6. 查找 |
| 7. 修改壹條記錄 |
| 8. 退出 |
其中:
(1)輸入若幹條記錄
(2)顯示所有記錄
(3)按學號排序
(4)插入壹些記錄
(5)按學號查找,刪除壹條記錄
(6)查找並顯示壹條記錄
(7)修改壹條記錄
(8)退出程序
三、系統功能和結構
1、系統的功能
1設計壹個簡單學生信息管理系統,用戶可以通過系統簡單的管理學生信息。
2設計出壹個菜單可以讓用戶選擇所執行的內容。
3建立單結構體,輸入學生的信息(學號、姓名和、性別、系和成績)。
4根據單結構體的特點采用冒泡法以總分為標準排序學生信息。
5根據用戶輸入的學號信息,固定的查詢學生的詳細信息。
6根據用戶的需求刪除或者添加某學生的信息。
2、概要設計
主要數據結構描述
typedef struct student //定義結構類型
{
char num[15]; //學號
char name[20]; //姓名
char sex; //性別
int score; //成績
char sdept[10]; //系
} ;
student stu[100]; //結構體數組變量
算法分析及程序流程圖
該項目劃分為7個模塊加退出,主函數可以分別調用這些模塊,然後通過個模塊來實現各種需要的功能。
四、程序如何實現
模塊詳細設計
根據上面的流程圖,下面分析每個模塊具體的功能,包括每個模塊的參數和得出的結果
函數名 int Input(student stu[],int n) //輸入信息
入口參數 無
返回值 無
模塊功能 建立單結構體並賦值,即錄入學生的信息
模塊1
函數名 void Display(student stu[],int n) //顯示所有信息
入口參數 無
返回值 無
模塊功能 用於顯示和方便查找學號的學生成績
模塊2
函數名 void Sort_by_num(student stu[],int n) //對輸入的信息按學號排序
入口參數 無
返回值 無
模塊功能 用於對學生按學號排序便於查看
模塊3
函數名 int Insert_a_record(student stu[],int n) //插入壹些記錄
入口參數 無
返回值 無
模塊功能 用於追加新的學生信息
模塊4
函數名 int Delete_a_record(student stu[],int n) //查找,刪除壹個記錄
入口參數 無
返回值 無
模塊功能 用於刪除學生壹些信息
模塊5
函數名 void Query_a_record(student stu[],int n) //查找並顯示壹個記錄
入口參數 無
返回值 無
模塊功能 用於查找並顯示壹個記錄
模塊6
函數名 void Replace_a_record(student stu[],int n) //按學號查找修改
入口參數 無
返回值 無
模塊功能 按學號查找並修改壹個學生信息
模塊7
函數名 exit(8)
入口參數 無
返回值 無
模塊功能 退出應用程序
模塊8
五、程序源代碼
程序正文部分
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct student //定義結構類型
{
char num[15]; //學號
char name[20]; //姓名
char sex; //性別
int score; //成績
char sdept[10]; //系
} ;
student stu[100]; //結構體數組變量
int menu_select() //菜單函數聲明
{
char c;
do{
system("cls"); /*運行前清屏*/ ;
printf("\t\t**********學生信息管理系統**********\n"); /*菜單選擇*/
printf("\t\t | 1. 輸入信息 |\n");
printf("\t\t | 2. 顯示所有信息|\n");
printf("\t\t | 3. 信息按學號排序|\n");
printf("\t\t | 4. 插入壹條記錄|\n");
printf("\t\t | 5. 刪除壹條記錄|\n");
printf("\t\t | 6. 查找 |\n");
printf("\t\t | 7. 修改壹條記錄 |\n");
printf("\t\t | 8. 退出 |\n");
printf("\t\t************************************\n");
printf("\t\t\t 妳的選擇是(1-8):");
c=getchar(); //妳的選擇c
}while(c<'1'||c>'8');
return(c-'0');
}
int Input(student stu[],int n) //輸入信息
{ int i=0;
char more;
while(more!='n'&&more!='N')
{printf("\t\t\t 請輸入學生學號:");
scanf("\t\t\t %s",&stu[n+i].num);
printf("\t\t\t 請輸入學生姓名:");
scanf("\t\t\t %s",&stu[n+i].name);
printf("\t\t\t 請輸入學生性別:");
scanf("\t\t\t %c",&stu[n+i].sex);
printf("\t\t\t 請輸入學生成績:");
scanf("\t\t\t %d",&stu[n+i].score);
printf("\t\t\t 請輸入學生所在系:");
scanf("\t\t\t %s",&stu[n+i].sdept);
printf("\t\t\t 您有更多信息要輸入嗎?Y/N:");
scanf("\t\t\t %c",&more);
i++;
}return(n+i);
}
void Display(student stu[],int n) //顯示所有信息
{ int i;
printf(" ---------------------------------------------------------------\n"); /*格式頭*/
printf(" | 學 號 | 姓 名 | 性別 | 成績 | 所在系 |\n");
printf(" ---------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{printf(" | %-15s| %-11s| %-5c| %-6d| %-12s|\n",stu[i-1].num,stu[i-1].name,
stu[i-1].sex,stu[i-1].score,stu[i-1].sdept );
printf(" ---------------------------------------------------------------\n"); //分格行
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(student stu[],int n) //對輸入的信息按學號排序
{ int i,j;
char l[15],t[20],q,k[10];
int p;
for(i=0;i<=n-1;i++) //起泡法排序
for(j=0;j<n-1-i;j++)
if(strcmp(stu[j].num,stu[j+1].num)>0)
{ l=stu[j].num;
stu[j].num=stu[j+1].num;
stu[j+1].num=l;
t=stu[j].name;
stu[j].name=stu[j+1].name;
stu[j+1].name=t;
q=stu[j].sex;
stu[j].sex=stu[j+1].sex;
stu[j+1].sex=q;
p=stu[j].score;
stu[j].score=stu[j+1].score;
stu[j+1].score=p;
k=stu[j].sdept;
stu[j].sdept=stu[j+1].sdept;
stu[j+1].sdept=k;
}
}
int Insert_a_record(student stu[],int n) //插入壹些記錄
{ int i=0;
char more;
while(more!='n'&&more!='N')
{printf("\t\t\t 請輸入學生學號:");
scanf("\t\t\t %s",&stu[n+i].num);
printf("\t\t\t 請輸入學生姓名:");
scanf("\t\t\t %s",&stu[n+i].name);
printf("\t\t\t 請輸入學生性別:");
scanf("\t\t\t %c",&stu[n+i].sex);
printf("\t\t\t 請輸入學生成績:");
scanf("\t\t\t %d",&stu[n+i].score);
printf("\t\t\t 請輸入學生所在系:");
scanf("\t\t\t %s",&stu[n+i].sdept);
Sort_by_num(stu, n);
printf("\t\t\t Insert Successed!\n"); //插入成功
printf("\t\t\t 您有更多信息要輸入嗎?Y/N:");
scanf("\t\t\t %c",&more);
i++;
}return(n+i);
}
int Delete_a_record(student stu[],int n) //查找,刪除壹個記錄
{ char l[15];
int i=0, j;
printf("\t\t\t 請輸入學生學號:"); //按學號查找
scanf("\t\t\t %s",l);
while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判斷
if(i==n)
{printf("\t\t\tnot find!\n"); //查找失敗
return(n);}
for(j=i;j<n-1;j++) //刪除操作
{ strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].name,stu[j+1].name);
stu[j].sex=stu[j+1].sex;
stu[j].score=stu[j+1].score;
strcpy(stu[j].sdept,stu[j+1].sdept);
}
printf("\t\t\t Delete Successed!\n"); //刪除成功
return(n-1) ;
}
void Query_a_record(student stu[],int n) //查找並顯示壹個記錄
{ char l[15];
int i=0;
printf("\t\t\t 請輸入學生學號:"); //按學號查找
scanf("\t\t\t %s",l);
while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判斷
if(i==n)
{ printf("\t\t\tnot find!\n"); //查找失敗
return;
}
printf("\t\t\t 學生的學號:%s\n",stu[i].num); //輸出該學生信息
printf("\t\t\t 學生的姓名:%s\n",stu[i].name);
printf("\t\t\t 學生的性別:%c\n",stu[i].sex);
printf("\t\t\t 學生的成績:%d\n",stu[i].score);
printf("\t\t\t 學生所在系:%s\n",stu[i].sdept);
}
void Replace_a_record(student stu[],int n) //按學號查找修改
{
char choice,l[15];
int i=0;
printf("\t\t\t 請輸入學生學號:"); //按學號查找
scanf("\t\t\t %s",l);
while(strcmp(stu[i].num,l)!=0 && i<n)i++; //查找判斷
if(i==n)
{printf("\t\t\tnot find!\n"); //查找失敗
return;}
printf("\t\t\t請選擇您要修改的學生的信息內容:\n");
printf("\t\t\t (1)修改學生姓名:\n");
printf("\t\t\t (2)修改學生性別\n:");
printf("\t\t\t (3)修改學生成績:\n");
printf("\t\t\t (4)修改學生所在系:\n");
printf("\t\t\t (5)取消 請按 5 \n");
printf("\t\t\t 請輸入您的選擇:\n");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("\t\t\t 請輸入新姓名:\n");
scanf("%d", stu[i].name);
break;
case 2:
printf("\t\t\t 請輸入新性別:\n");
scanf("%s", stu[i].sex);
printf("\t\t\t");
system("pause");
break;
case 3:
printf("\t\t\t 請輸入新成績:\n");
scanf("%s", stu[i].score);
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\t 請輸入新的所在系:\n");
scanf("%s", stu[i].sdept);
printf("\t\t\t");
system("pause");
break;
case 5:
printf("您選擇了取消,Bye-Bye!\n") ;
exit;
}
}
void main() //主函數
{
int n=0;
for(;;) //相當於while(1)語句,不設初值,認為表達式2為真值,循
//環變量不增值,無終止的執行循環
{
switch(menu_select())
{
case 1:
printf("\t\t\tInput Records\n"); //輸入若幹條記錄
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); //顯示所有記錄
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); //按學號排序
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); //插入壹些記錄
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); //按姓名查找,刪除壹條記錄
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); //查找並顯示壹個記錄
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\treplace\n"); //修改壹條信息
Replace_a_record(stu,n);
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); //結束程序
printf("\t\t\t");
system("pause");
exit(8);
}
} }
六、 程序的運行與實現
(1)輸入若幹條記錄
(2)顯示所有記錄
(3)按學號排序
(4)插入壹些記錄
(5)按學號查找,刪除壹條記錄
(6)查找並顯示壹條記錄
(7)修改壹條記錄
(8)退出程序