C語言課程設計學生通訊錄管理系統設計
一、題目內容的描述
學生通訊錄管理系統設計
設計一個學生通信錄,學生通迅錄數據信息構成內容可自行設計(如:姓名、家庭地址、郵政編碼、電話號碼等等),通信錄數據類型定義為結構體類型。由鍵盤輸入數據(最好要考慮輸入數據輸入的格式及輸入數據的有效性),然后進行以下的功能實現。程序要求主函數是一個功能選擇菜單,其它各功能都用各自的函數實現。
功能要求如下:
1、能建立、修改和增刪學生通訊錄
2、能夠按多種方式進行查詢,例如按姓名、按電話號碼等。
3、通訊錄的數據保存在文件中,運行程序時將通訊錄數據從文件讀取到內存中。對通訊錄進行增加、刪除、修改學生數據后,提供功能菜單,可以將內存中修改過的通訊錄重新保存至文件。
二、應用程序功能的詳細說明
1、應用程序實現了可視化的系統操作界面。
2、對學生通訊錄形成了系統化的管理,操作簡便明了。
3、程序具有系統幫助,添加、顯示、查詢、刷新、刪除、排序、保存、修改、讀取學生通訊錄的功能。各項功能均可按照文字提示操作,淺顯易懂。
4、系統的各個功能模塊都用函數的形式來實現(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。
5.可以將信息保存在文件(“student.txt“)中,亦可將信息從文件中讀取出來,靈活方便。
三、主要模塊的算法描述
學生通訊錄管理系統
刷新學生信息readfile()
查詢學生信息seek()
增加學生信息insert()
顯示學生信息display()
退出系統
修改學生信息modify()
刪除學生信息del()
保存當前學生信息save()
匯總當前學生數目number()
系統幫助help()
查詢學生信息
按姓名查詢
退出
按學號查詢
開始
以可讀寫的方式打開一個數據文件
將此文件的內容讀出,并存入一個新的結構體類型的數組中。
調用menu()菜單函數
進入while()主循環
輸入1-8中的一數值,選擇相應操作。
輸入是否為0
判斷鍵值,調用相應函數,完成相應功能。
是否已對修改存盤
調用函數save()函數,進行寫數據文件操作
結束
模塊一:頭文件,變量定義,函數的聲明
對系統所使用的變量進行定義,對函數進行聲明。
模塊二:錄入學生信息
聲明函數void
readfile(),說明一個文件指針FILE
*fp打開文
件“student.txt“。
模塊三:學生信息的查找
聲明void
seek()為查找函數,通過switch(item)設定用學號查找,用姓名查找兩個分支。
模塊四:學生信息的修改
聲明void
modify()為學生信息修改函數,通過switch(item)設定
所要修改的項目。
模塊五:刷新學生信息
聲明void
sort()將錄入學生系按升序排列,用的是“冒泡排序法”
實現排序。
模塊六:增加學生信息
聲明void
insert()插入學生信息,先通過判斷學生是否存在,若
否則繼續輸入,若是則跳出,重新循環。
模塊七:刪除學生信息
聲明void
del()實現學生信息刪除,通過學號對比確定要刪除的信
息,然后用后一個替換掉。
模塊八:顯示學生信息
通過display()函數輸出學生信息。
模塊九:保存信息
通過fp=fopen(“student.txt“,“w“);寫入信息。
模塊十:匯總學生數目
通過number()函數將已有男女生及總學生數目匯總出來。
模塊十一:系統幫助
通過help()函數幫助操作。
模塊十二:界面菜單
通過switch(num)調用以上各函數,實現功能。
1、程序采用模塊化設計,各模塊獨立,可分塊調試,個模塊由主函數控制調用。
2、其中主要模塊(readfile()、seek()、modify())都是利用數組,指針來實現數據結構設計。
3、數據庫設計的任務是確定系統所需要的數據庫。數據庫是表的集合,通常一個系統只需一個數據庫。設計人
是根據需求分析,確定數據庫所包含的表及字段、表間的關系,然后具體確定表的結構,包括字段名、字段類型及寬度,需要的索引等。根據對需求得到的數據結構進行分析,按數據輸入輸出的要求,確定表和表間的關系,進行驗證、調整、修改、完善,使其能夠實現用戶對數據和功能的要求。通訊信息表包括以下字段:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail。學號為主索引。
四、結束語
我設計的程序總體功能大都能夠運行順利,但有許多地方比較復雜,需要進一步修改,進行簡化。通過這次課程設計的鍛煉,我收獲很多,具體歸納為以下幾點:
1、首先,也是最重要的一點,學會如何將一個復雜的問題簡化,將一個較大的問題分成幾個小問題,再一一解決這些小問題。在設計一個程序之前,要學會對程序功能進行規劃,將其分為幾個不同的功能模塊,要思路清晰,簡單易用;
2、學會靈活運用已有的知識,同時適當的拓展一些知識;比如,這次設計過程中,有一些函數以前就很少用到,甚至沒有見過,但對程序的設計及用戶界面的改善帶來方便;
3、解決問題時,要盡可能考慮全面。每一個細節都很重要,既要避免功能的重復,也要避免功能疏漏的地方!
4、在這次課程設計過程中,參考了許多資料,發現C語言真的很有意思!比如我看到一個關于用C語言編寫的小程序:五子棋、俄羅斯方塊、推箱子等,等這次課程結束后,我就想利用C語言編寫這些小游戲。曾經認為C是個挺枯燥的課程,現在發現這不僅僅是個簡單的課程,而是個很實用的計算機工具!
五、程序源代碼清單
#include
#include
#include
#define
BUFLEN
#define
LEN
#define
N
struct
record
{
char
code[LEN+1];
char
name[LEN+1];
int
age;
char
sex[3];
char
time[LEN+1];
char
add[30];
char
tel[LEN+1];
char
mail[30];
}stu[N];
int
k=1,n,m;
void
readfile();
void
seek();
void
modify();
void
insert();
void
del();
void
display();
void
save();
void
number();
void
menu();
int
main()
{
while(k)
menu();
system(“pause“);
return
0;
}
void
readfile()//刷新學生信息
{
char
*p=“student.txt“;
FILE
*fp;
int
i=0;
if
((fp=fopen(“student.txt“,“r“))==NULL)
{
printf(“Open
file
%s
error!
Strike
any
key
to
exit!“,p);
system(“pause“);
exit(0);
}
while(fscanf(fp,“%s
%s%d%s
%s
%s
%s
%s“,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf(“錄入完畢!\n“);
}
void
seek()//查詢學生信息
......void
modify()//修改學生信息
......void
sort()//對學生信息按學號排序
{
int
i,j,*p,*q,s;
char
temp[10];
for(i=0;i { for(j=n-1;j>i;j--) if(strcmp(stu[j-1].code,stu[j].code)>0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail,stu[j].mail); strcpy(stu[j].mail,temp); p=&stu[j-1].age; q=&stu[j].age; s=*q; *q=*p; *p=s; } } } void insert()//增加學生信息 ......void display()//顯示當前學生信息 { int i; printf(“所有學生的信息為:\n“); printf(“學生學號,學生姓名,年齡,性別,出生年月,地址,電話,E-mail\n“); printf(“--------------------------------------------------------------------\n“); for(i=0;i { printf(“%6s,%7s,%5d,%5s,%9s,%8s,%10s,%14s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } } void save()//保存當前學生信息 { int i; FILE *fp; fp=fopen(“student.txt“,“w“); for(i=0;i { fprintf(fp,“%s,%s,%d,%s,%s,%s,%s,%s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } fclose(fp); } void number()//匯總學生數目 { int i,girl,boy=0; for(i=0;i if(strcmp(stu[i].sex,“1“)==0) {boy++;} girl=n-boy; printf(“男生人數是:%d\n女生的人數是:%d\n“,boy,girl); printf(“總的學生人數為:%d“,n); } void help()//系統幫助 { printf(“輸入性別時男為1,女為2“); printf(“\n3.增加學生信息后,切記保存按7;\n“); printf(“\n4.謝謝您的使用!\n“); } void menu()//可視化的系統操作界面 { int num; printf(“ \n\n 學生通訊錄管理系統 \n\n“); printf(“ *********************系統功能菜單************************ \n“); printf(“ -------------------------------- ------------------------------- \n“); printf(“ 1.刷新學生信息 2.查詢學生信息 \n“); printf(“ ********************************************* \n“); printf(“ 3.修改學生信息 4.增加學生信息 \n“); printf(“ ********************************************* \n“); printf(“ 5.按學號刪除信息 6.顯示當前信息 \n“); printf(“ ********************************************* \n“); printf(“ 7.保存當前學生信息 8.匯總學生數目 \n“); printf(“ ********************************************* \n“); printf(“ 9.系統幫助 10.退出系統 \n“); printf(“ --------------------------------- ------------------------------ \n“); printf(“ ************************************************************ \n“); printf(“請選擇菜單編號:“); scanf(“%d“,&num); switch(num) { case 1:readfile();break; case 2:seek();break; case 3:modify();break; case 4:insert();break; case 5:del();break; case 6:display();break; case 7:save();break; case 8:number();break; case 9:help();break; case 10:k=0;break; default:printf(“請在1-10之間選擇\n“); } }