




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 課程設計報告書 題目:學生信息管理系統設計 學 院 電子與信息學院 專 業 電子信息類 學生姓名 學生學號 指導教師 課程編號 135160 課程學分 1學分 起始日期 2015年4月20日 教師評語教師簽名:日期:成績評定備注 課程設計任務書1.1 課程設計內容:題目:學生信息管理系統設計學生信息包括:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail等。提供以下功能:1、系統以菜單方式工作2、學生信息錄入功能(學生信息用文件保存)輸入3、學生信息瀏覽功能輸出4、學生信息查詢功能算法,按學號、姓名等查詢5、學生信息的刪除與修改1.2 實施步驟 1、 初步完成總體設計,設計好框架,確
2、定人機對話的界面,確定函數個數。2、 建立一個文件,將每位學生的信息寫入所建立的學生信息文本中,方便以后按照不同操作查找學生信息。3、 完成上述信息查詢、瀏覽、刪除和修改等功能。1.3 要求1、 用C語言實現程序設計;2、 利用結構體數組實現學生信息的數據結構設計;3、 系統的各個功能模塊要求用函數的形式實現;4、 界面友好(良好的人機交互),程序加必要的注釋。 目 錄一、選題背景.1 1.1 本課題應解決的主要問題.1 1.2 應達到的技術要求.1 1.3 指導思想.1 1.4 功能.1二、方案論證(設計理念).2 2.1 設計原理.2 2.2 方案選擇.2 2.3 選擇原因及特點介紹.2三
3、、過程論述.2 3.1 數據類型說明.2 3.2 函數類型說明.3 3.3 流程圖說明.6四、結果分析.13 4.1 登陸界面.13 4.2 新建信息.15 4.3查詢信息.16 4.4 修改信息.18 4.5 刪除信息.19 4.6 添加信息.20 4.7 瀏覽信息.21 4.8 退出系統.21五、課程設計總結.22 5.1 主要過程總結.22 5.2 遇到的問題和解決方案.22 5.3 個人體會與收獲.23六參考文獻.24七、附件(源程序).24 學生信息管理系統設計一、選題背景1.1 本課題應解決的主要問題:學生信息管理系統記錄了學生的學號,姓名,年齡,性別,出生年月,地址,電話,E-m
4、ail等信息。設計該程序系統,方便對學生信息進行管理。1.2 應達到的技術要求: 1.2.1登錄界面,通過輸入初始密碼和初始學號登陸界面。 1.2.2對學生信息進行錄入,建立信息文本,創建鏈表并儲存在文件里。 1.2.3通過姓名或學號等方式進行信息查找,并以“wb”形式打開文件,輸出相應信息內容。 1.2.4刪除學生相關信息,采用查找節點,并刪除該節點的方式。 1.2.5以“ab”追加形式打開文件,對信息進行修改或添加。 1.2.6打開信息文本,將所有信息文本內容都輸出來,成功瀏覽信息。 1.3指導思想1.3.1 程序函數化,采用調用函數的方式,使程序條理清晰;1.3.2 函數建立后要逐個運行
5、,查找錯誤;1.3.3 按順序寫函數,方便程序的查看,以防缺漏。1.4、功能:登陸界面,進入主菜單,進行信息錄入,按照不同方式查詢成績,修改或刪除信息,瀏覽所有文本信息,退出系統。2、 方案論證(設計理念)2.1 設計原理 根據題目的要求,分別設計好各個功能的函數,在寫好主函數,對各個函數組進行調用,從而實現系統功能的應用。2.2 方案選擇 首先建立學生信息文本,實現學生信息的錄入和存儲;調用各個函數,應用fopen打開學生信息文本,實現對信息進行修改、添加、刪除、瀏覽等功能。2.3 選擇原因及特點介紹 該系統要實現的功能是學生信息的錄入,同時能夠對信息進行查詢、修改、刪除、添加和瀏覽等功能,
6、采用這個方案,主要因為符合這些功能的實現,滿足課題要求,同時,該系統是在VC6.0 的開發環境下運行的,安全性強。并且該方案采用文本存儲信息,防止數據丟失,能保證數據的完整性。三、過程論述3.1 數據類型說明:struct student類型用結構體儲存學生信息,類型中包括:1、num(學號),char數組類型,最多輸入15位數字;2、name(姓名),char數組類型,最多輸入12位字母;3、sex(性別),char數組類型,最多輸入4個字符;4、age(年齡),char數組類型最多輸入4個字符;5、add(地址),char數組類型,最多輸入16位字母;6、tel(手機),char數組類型,
7、最多輸入12位數字;7、birth(出生日期),char數組類型,最多輸入12位數字;8、QQ(也為電子郵箱),char數組類型,最多輸入13個數字;9、指針next,struct student類型,用于存放鏈表下一結點的地址。并定義typedef struct student為student。3.2 函數類型說明: a. 自定義函數:delay函數類型:void參數:無功能:延時。 返回值:無create函數類型:viod參數:無功能:記錄信息,按順序輸入數據,并把數據連成鏈表,并創建一個新的文本存儲數據返回值:無search_name函數類型:void參數:fhead指針功能:按照輸入的
8、姓名在文本中查找,若找到就顯示信息,若找不到就顯示沒有該信息返回值:無Search_num函數類型:void參數:fhead指針功能:按照輸入的學號在文本中查找,若找到就顯示信息,若找不到就顯示沒有該學生的信息返回值:無change函數類型:void參數:fhead指針功能:修改信息,若要修改的學生信息存在就顯示出來并進行修改,若不存在就顯示沒 有該學生的信息返回值:無del函數類型:void參數:fhead指針功能:刪除學生信息,若要刪除的學生信息存在就刪除,若不存在就顯示沒有該學生的信息返回值:無add函數類型:void參數:無功能:增加學生信息記錄返回值:無open函數類型:studen
9、t參數:void功能:打開文件,將文件里面的數據載入鏈表,并將鏈表的頭指針fhead返回返回值:fheadprint函數類型:void參數:無功能:將文件里面的數據打印出來返回值:無slose函數類型:void參數:無功能:系統退出界面,延時大約2秒后自動退出程序返回值:無mainmenu函數類型:void參數:無功能:實現主菜單的顯示和選擇操作功能返回值:無main函數類型:void參數:無功能:程序的主函數,實現程序的功能返回值:無b.系統庫函數: 函數名 頭文件 功能輸入輸出函數 頭文件stdio.h 對數據進行輸入輸出strcmp函數 頭文件string.h 比較兩字符數組是否相同sy
10、stem(”cls”) 頭文件 stdlib.h 清除當前屏幕內容system(”color ”) 頭文件 windows.h 改變Dos界面的背景色和前景色system("pause") 頭文件 windows.h 使程序暫停system("mode con 頭文件 windows.h 改變程序操作界面的大小cols=108 lines=30");getch()函數 頭文件conio.h 從鍵盤讀取一個字符c.關鍵變量說明 student * fphead為文件數據載入鏈表的鏈表的頭指針3.3 流程圖說明主菜單流程圖 登陸界面 登錄成功學生信息管理系統
11、主菜單 錄 入 信 息 模 塊瀏覽信息模塊 添 加 信 息 模 塊退出系統模塊修改信息模塊查詢信息模塊刪除信息模塊按學號查詢按姓名查詢 開始3.3.2錄入信息模塊流程圖 輸入信息將數據寫進文本是否繼 續 輸 入是不是按任意鍵回主菜單3.3.3查詢信息模塊流程圖開始 文件不存在 讀取數據文件存在輸入要查詢的方式“0”或“1”判斷是否為“0”輸出“還未建立信息”不是是判斷是否為“1”輸出對應學號的學生信息是輸出對應姓名的學生信息返回主菜單3.3.4修改信息模塊流程圖開始 文件不存在 讀取數據文件存在輸入要修改的姓名否是否找到信息輸出“還未建立信息”是輸出信息無此信息 輸入數據將數據寫進文本,并輸出
12、“修改成功”按任意鍵回主菜單3.3.5刪除信息模塊流程開始文件不存在 讀取數據文件存在輸入要刪除的姓名否是否找到信息輸出“還未建立信息”無此信息是刪除數據輸出“刪除成功”按任意鍵回主菜單3.3.6添加信息模塊流程開始 輸入數據將數據寫進文本是否繼 續 輸 入是否按任意鍵回主菜單 開始瀏覽信息模塊文本不存在 讀取數據文本存在 輸出所有信息按任意鍵回主菜單退出系統模塊流程圖開始是否退出系統 返回主菜單否是 退出程序4、 結果分析 4.1 登陸界面。 4.1.1 只有輸入正確的學號和密碼才能進入主菜單進行操作。 然后成功登陸,進入主菜單:對于程序中各個菜單的選項輸入時只有輸入符合的編號才會執行下一步
13、,否則待用戶繼續輸入。(一輸入即執行,不需回車) 輸入錯誤時會顯示輸入錯誤并在大約0.5秒后回到上面的主菜單: 4.1.4 未建立文件時,在進行查詢,修改,刪除,添加信息等操作時會出現如圖情況,按任何鍵回到主菜單:4.2 新建信息 4.2.1 選定錄入信息時會詢問是否要錄入信息; 4.2.2 確定要錄入信息后,需要按照彈出的提示完成相關信息的錄入;錄入完成后,可以選擇是否繼續進行學生信息的錄入:4.3查詢信息 4.3.1選擇查詢信息后,會彈出方式選擇框,需進行方式選擇;若輸入不是“0”或“1”時,則會自動返回主菜單:按學號查詢:若查詢的學號不存在,按任何鍵回到主菜單。學號存在時,會輸出你所要查
14、詢者的相關信息:4.3.3 按姓名查詢:若查詢的姓名不存在,按任意鍵返回主菜單:學號存在時,成功將所要查詢的相關信息輸出:4.4 修改信息: 若學生信息文本中存有信息,會自動輸出所查詢人的相關信息,按照彈出的指令,對信息進行修改,修改完成后,會提示修改成功,按任意鍵返回主菜單:4.5 刪除信息:.因為學生信息很重要,一刪除將無法找回,所以會彈出溫馨提示,是否確定要刪除信息: 4.5.2 確定要刪除相關信息后,彈出提示,輸入想要刪除的信息者姓名,如果輸入姓名在學生信息庫中不存在,會彈出相應提示,按任意鍵返回主菜單: 4.5.3 輸入姓名后,系統會將存在的用戶信息全部刪除,并提醒刪除成功。4.6
15、添加信息 按照提示輸入學生個人信息,即可將添加信息到學生信息文本中,添加成功后,按任意鍵返回:4.7 瀏覽信息: 確定瀏覽信息后,可以瀏覽所有學生信息,即將學生信息文本全部內容展示出來: 4.8 退出系統:詢問是否要退出系統,確定退出后,按任意鍵,系統將自動關閉:五、課程設計總結5.1 主要過程總結該程序是在Visual C+ 6.0環境下運行的,編輯源程序后,在編譯器中編譯,根據編譯器提示的錯誤,修改程序。其次,通過輸入正確和非正確的數據,查看結果,再分析出現錯誤的原因并找出正確的方法,解決問題。當然,除了作業要求的模塊,自己還加入改變操作界面的背景色的模塊,制造一定的視覺效果,而不會整個界
16、面都是黑底白字。其次添加調節界面的大小的模塊,也調用了延時函數。5.2 遇到的問題和解決方案問題一:如何才能實現獲得一個字符后程序就能直接運行而不用按回車鍵。解決方案:通過查閱網上的資料才知道getch()函數就能實現這個功能,而且還要增加conio.h這個頭文件。問題二:如何保存輸入的信息。解決方案:在C程序設計書中,可以了解到,通過建立一個文件儲存數據,就能解決問題。問題三:如何將屏幕清空解決方案:用system(“cls”)即可,但要增加stdlib.h這個頭文件。問題四:如何修改文件中的數據解決方案:用一個鏈表載入文件的數據,在鏈表中修改數據,再用“wb”的方式打開文件,并把鏈表里面的
17、數據寫入文件中。問題五:顯示的東西太多,界面的長度不夠解決方案:使用system("mode con cols=108 lines=30")函數改變程序操作界面的大小,要增加頭文件windows.h 問題六:輸出的數據是亂碼解決方案:增大數組的長度。問題七:文件是空的時候,輸出數據的結果是一堆亂碼解決方案:原來文件是空的時候,文件指針指向的是一個非零地址,所以輸出的是一堆亂碼。把文件載入一個鏈表后返回鏈表的頭指針,然后再通過頭指針打印就可以解決問題,不會出現亂碼了。5.3 個人體會與收獲 這是我第一次做程序設計,這次大作業對我來說,挺有挑戰性的。畢竟,它是對上學期所學的C程
18、序設計的總體運用,如果對C程序設計這本書的內容不熟悉的話,做大作業一定一籌莫展。所以,一開始因為許久沒看C語言,很多知識都回生了,只能重新回歸課本。因為侯老師說:在一開始一定要注意整體的構思。所以,在看了題目要求之后,選擇了學生信息管理系統,因為對這個相對比較熟悉,題目要求的難度也不大。其實,我設計程序的順序是按照題目的要求,將每一個要求都想出具體的解決算法。因為要求菜單的方式工作,所以我把各個功能分成七大模塊,每個模塊都有設計了相應的算法,根據算法,寫出程序。最后,用主函數將各大模塊連接起來,形成完整的源程序。然后在編譯器中編譯、連接、執行,根據編譯器的錯誤提示修改程序,解決問題。當符合題目
19、要求的程序完成之后,就是進行改進,在源程序上進行其他的設計,為大作業增色。所以,我參考其他同學的設計,添加了設置背景色,延時的效果。當然,延時體現得并不很出色。其次,對功能實現方面進行改進。其實,這個作用,部分功能有點重復,比如,錄入和添加信息這兩個功能,并不能很好體現他們的功能特色,有點重復,但由于能力原因,我還是沒辦法改進的很完美。還有修改方面,不能選擇性修改,需要一改全改,這個對于應用者而言,確實有點麻煩。這次大作業,其實我還有很多想法,但由于時間、能力的限制,只能盡力了。這次作業,也讓我更全面地認識了C語言,對上學期學的知識也有了更深刻的理解,對知識的應用也有了更深的體會。感謝侯識華老
20、師的指導,謝謝侯老師解答我遇到的疑惑,讓我順利完成作業。六參考文獻【1】譚浩強. C程序設計(第三版).北京.清華大學出版社.2010.6 【2】嚴蔚敏.數據結構.北京.清華大學出版社.2011.11七、附件(源程序)typedef struct studentchar num15; /學號char name12; /姓名char sex4; /性別char age4; /年齡char add16; /地址char tel12; /手機char birth12; /出生日期char QQ13; /QQstruct student *next;/下一個數據的地址student;#include&
21、lt;stdio.h> /頭文件#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>#define NULL 0 /函數結果狀態代碼#define LEN sizeof(student) /宏定義LEN為結構體的大小void start() /登陸界面system("cls");system("color 1b");unsigned int a,b;printf(" * n");printf
22、(" *登陸界面* n");printf(" * * n");printf(" * 華南理工大學學生信息管理系統 * n");printf(" *系統介紹* n");printf(" * 該系統用于華工學子的信息收錄 * n");printf(" * 方便學校對學生信息的管理 * n");printf(" * n");printf(" * n");printf(" * 請按以下操作進行登錄 * n");printf(
23、" * n");printf(" * n"); printf("請輸入你的學號(初始學號是2014):n");scanf("%d",&a);while(a!=2014) printf("該學號不存在,請重新輸入:"); scanf("%d",&a);printf("請輸入密碼(初始密碼為2014):n");scanf("%d",&b);while(b!=2014) printf("密碼錯誤,請重新輸入:
24、"); scanf("%d",&b);void delay (unsigned int ms) /定義延時函數 unsigned int j;unsigned int z;for (z=0;z<ms;z+)for (j=0;j<11410;j+); void creat() /創建鏈表并儲存在文件里 int m;char x='i'int n=0; FILE *fp; student *head; student *p,*q; p=q=(student *) malloc(LEN); fp=fopen("學生信息.tx
25、t","wb"); system("cls"); printf("n請輸入學號并按回車鍵:"); scanf("%s",p->num); printf("n請輸入姓名并按回車鍵:"); scanf("%s",p->name); printf("n請輸入性別并按回車鍵:"); scanf("%s",p->sex); printf("n請輸入年齡并按回車鍵:"); scanf("%s
26、",p->age);printf("n請輸入你的出生日期(如2000.1.1)并按回車鍵:");scanf("%s",p->birth); printf("n請輸入住址(具體到市)并按回車鍵:"); scanf("%s",p->add); printf("n請輸入手機并按回車鍵:"); scanf("%s",p->tel);printf("n請輸入QQ并按回車鍵:"); scanf("%s",p->
27、;QQ); fwrite(p,LEN,1,fp); /將數據寫入文件 fclose(fp); head=NULL; m=1; while(m!=0) n=n+1; if(n=1) head=p; else q->next = p; q = p; p=(student *)malloc(LEN); while(x!='n'&&x!='y'&&x!='N'&&x!='Y') printf("n是否繼續輸入信息(Y/N)"); x=getch(); switch(
28、x) case 'y': case 'Y': fp=fopen("學生信息.txt","ab"); /以ab追加形式打開文件 system("cls"); printf("n請輸入學號并按回車鍵:"); scanf("%s",p->num); printf("n請輸入姓名并按回車鍵:"); scanf("%s",p->name); printf("n請輸入性別并按回車鍵:"); scanf(&
29、quot;%s",p->sex); printf("n請輸入年齡并按回車鍵:"); scanf("%s",p->age);printf("n請輸入你的出生日期(如2000.1.1)并按回車鍵:");scanf("%s",p->birth); printf("n請輸入住址(具體到市)并按回車鍵:"); scanf("%s",p->add); printf("n請輸入手機并按回車鍵:"); scanf("%s&quo
30、t;,p->tel);printf("n請輸入QQ并按回車鍵:"); scanf("%s",p->QQ); fwrite(p,LEN,1,fp); fclose(fp); x='i'break; case 'n': case 'N':m=0; system("cls");break; q->next = 0; void search_name(student * fphead) /名字查詢 student *p; int a=0; char name10; system
31、("cls"); printf("請輸入要查找的學生姓名并按回車鍵:n"); scanf("%s",name); for(p=fphead->next;p!=NULL;p=p->next) if(strcmp(p->name,name)=0) printf(" _n"); printf(" | 學號 | 姓名 | 性別 | 年齡 | 出生日期 | 住址 | 手機 | e-mail |nn"); printf(" | %12s | %-10s| %s | %2s |%1
32、1s|%14s| %-11s | %10s |n",p->num,p->name,p->sex,p->age,p->birth,p->add,p->tel,p->QQ); printf(" _n"); a=1; if(a!=1) printf("無此學生的信息!n"); system("pause"); void search_num(student * fphead) /學號查詢 student *p; int a=0; char num15; system("cl
33、s"); printf("請輸入要查找的學生學號并按回車鍵:n"); scanf("%s",num); for(p=fphead->next;p!=NULL;p=p->next) if(strcmp(p->num,num)=0) printf(" -n"); printf(" | 學號 | 姓名 | 性別 | 年齡 | 出生日期 | 住址 | 手機 | QQ |n");printf(" -n"); printf(" | %12s | %-10s| %s |
34、%2s |%11s|%14s| %-11s | %10s |n",p->num,p->name,p->sex,p->age,p->birth,p->add,p->tel,p->QQ); printf(" -n"); a=1; if(a!=1) printf("無此學生的信息!n"); system("pause");void change(student *fphead) /修改信息 FILE *fp; student *p,*q; int a=0; char change12
35、; system("cls"); printf("請輸入要修改的姓名:n"); scanf("%s",change); for(p=fphead->next;p!=NULL;p=p->next) if(strcmp(p->name,change)=0) printf(" -n"); printf(" | 學號 | 姓名 | 性別 | 年齡 | 出生日期 | 住址 | 手機 | QQ |n");printf(" -n"); printf(" | %1
36、2s | %-10s| %s | %2s |%11s|%14s| %-11s | %10s |n",p->num,p->name,p->sex,p->age,p->birth,p->add,p->tel,p->QQ); printf(" -n"); printf("n請輸入新學號并按回車鍵:"); scanf("%s",p->num); printf("n請輸入新姓名并按回車鍵:"); scanf("%s",p->name);
37、 printf("n請輸入性別并按回車鍵:"); scanf("%s",p->sex); printf("n請輸入年齡并按回車鍵:"); scanf("%s",p->age);printf("n請輸入你的出生日期(如2000.1.1)并按回車鍵:");scanf("%s",p->birth); printf("n請輸入新住址(如具體到市)并按回車鍵:"); scanf("%s",p->add); printf(&
38、quot;n請輸入新手機并按回車鍵:"); scanf("%s",p->tel);printf("n請輸入新QQ并按回車鍵:"); scanf("%s",p->QQ); fp=fopen("學生信息.txt","wb"); q=fphead->next; while(q!=0) fwrite(q,LEN,1,fp); if(q->next!=0) q=q->next; else q=0; fclose(fp); printf("修改成功!&quo
39、t;); a=1; if(a!=1) printf("n無此學生信息!n"); void del(student *fphead) /刪除數據 FILE *fp; student *p,*q,*r; char delname12; p=(student *) malloc(LEN); p=fphead; system("cls"); fp=fopen("學生信息.txt","wb"); printf("請輸入要刪除記錄的姓名:"); scanf("%s",delname);
40、while(strcmp(p->name,delname)!=0&&p->next!=0) q=p; p=p->next; if(strcmp(p->name,delname)=0) if(p=fphead) fphead=p->next; else q->next = p->next; r=fphead->next; while(r!=0) fwrite(r,LEN,1,fp); if(r->next!=0) r=r->next; else r = 0; printf("n刪除成功n"); els
41、e printf("n抱歉,您所查找的用戶不存在,請重新輸入!n"); r=fphead->next; while(r!=0) fwrite(r,LEN,1,fp); if(r->next!=0) r=r->next; else r = 0; fclose(fp); void add() /增添信息 int m;char x='i'int n=0; FILE *fp; student *head; student *p,*q; p=q=(student *) malloc(LEN); fp=fopen("學生信息.txt","ab"); system("cls"); printf("n請輸入學號并按回車鍵:"); scanf("%s",p->num); printf("n請輸入姓名并按回車鍵:"); scanf("%s",p->name); printf(&quo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業園區給排水系統的設計與優化
- 工業智能化的技術創新與實踐
- 工業廢水處理技術及優化方案
- 工業安全保障生產現場的員工安全
- 工業生態園區的建設與管理
- 工業物聯網設備的安全防護與監控
- 工業機器人故障診斷與維護管理
- 工業自動化系統的創新與發展
- 工業自動化中的特種電源技術應用案例分析
- 工業自動化與智能機器人整合方案
- 工業自動化設備維護保養操作手冊
- 針灸師招聘面試題與參考回答2025年
- 與信仰對話 課件-2024年入團積極分子培訓
- 直播助農創業計劃書
- 核技術在環保領域的應用
- 弱電監控系統工程施工組織計劃書
- 新塘2標(南交通核)FAS、BAS施工方案
- 廣東省珠海市香洲區2023-2024學年七年級下學期期末歷史試題(原卷版)
- (高清版)AQ 2061-2018 金屬非金屬地下礦山防治水安全技術規范
- 12S108-2 真空破壞器選用與安裝
- 2024年武漢市中考數學真題試卷及答案解析
評論
0/150
提交評論