學(xué)生信息管理系統(tǒng)測試報告
《學(xué)生信息管理系統(tǒng)測試報告》由會員分享,可在線閱讀,更多相關(guān)《學(xué)生信息管理系統(tǒng)測試報告(34頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 1.引言 1.1 編寫目的 本測試報告為學(xué)生信息管理系統(tǒng)項目的測試報告,目的在于測試總結(jié)以及分析測試結(jié)果,描述系統(tǒng)是否符合需求.學(xué)生信息管理系統(tǒng)是應(yīng)用于學(xué)校學(xué)生信息的管理以及維護(hù)的軟件??梢苑奖愕墓芾韺W(xué)生信息,維護(hù)以及修改學(xué)生信息。 1。2 項目背景 隨著高校學(xué)生數(shù)量的增多,信息復(fù)雜度增加,十分有必要通過學(xué)生信息管理系統(tǒng)來完成學(xué)生信息的管理,修改及維護(hù)。開發(fā)學(xué)生信息管理系統(tǒng)在當(dāng)今高校是十分有必要的. 1.3 用戶群 使用于學(xué)校. 1。4 基本定義 五類測試錯誤類型。 A類:嚴(yán)重錯誤,包括以下各種錯誤: n 由于程序所引起的死機(jī),非法退出 n 死循環(huán) n
2、 因錯誤操作導(dǎo)致的程序中斷 n 功能錯誤 n 數(shù)據(jù)通訊錯誤 B類:較嚴(yán)重錯誤,包括以下各種錯誤: n 程序錯誤 n 程序接口錯誤 C類:一般性錯誤,包括以下各種錯誤: n 操作界面錯誤(包括數(shù)據(jù)窗口內(nèi)列名定義、含義是否一致) n 打印內(nèi)容、格式錯誤 n 刪除操作未給出提示 n 與日常生活不符 D類:較小錯誤,包括以下各種錯誤: n 界面不規(guī)范 n 輔助說明描述不清楚 n 錯誤操作未給用戶提示 n 提示窗口文字未采用行業(yè)術(shù)語 1。5 參考資料 [1]《編程思想》,機(jī)械工業(yè)出版社,2007 [2]《軟件測試方法和技術(shù)(第二版)》,清華大學(xué)出版社 2 測試概
3、要 測試目的: 在于為執(zhí)行測試提供用例,指導(dǎo)測試的實施,查找分析缺陷,評估測試質(zhì)量并執(zhí)行測試用例后,需要跟蹤故障,以確保開發(fā)的產(chǎn)品適合需求。 測試聲明:測試人員在軟件開發(fā)過程中的任務(wù): ?? 1、尋找Bug; 2、軟件各種屬性的組合程度良好; ????? 2、避免軟件開發(fā)過程中的缺陷; ????? 3、衡量軟件的品質(zhì); ????? 4、關(guān)注用戶的需求。 2.1 測試環(huán)境 2。1.1 軟件硬件配置 表2—1配置表 環(huán)境 VC++6.0 硬件配置 CPU:CPU奔騰Ⅲ以上 內(nèi)存:512M以上 硬盤:500G或以上 軟件配置 VC++
4、6。0 2.1.1 運行界面 運行界面如下: 34 圖2—1 系統(tǒng)開始界面 2。2 測試執(zhí)行 此次測試嚴(yán)格按項目測試計劃執(zhí)行,按時完成了測試計劃規(guī)定的測試對象的測試。針對測試計劃規(guī)定的測試策略,在測試執(zhí)行中都有實現(xiàn),在測試執(zhí)行過程中,依據(jù)測試計劃和測試用例,對系統(tǒng)進(jìn)行了完整的測試. 2.3 測試用例 1. 增添模塊功能測試: 主要測試學(xué)生信息能否按一定要求與格式正確輸入. 流程圖及測試用例:如下圖。 (1) 字段名稱 描述 標(biāo)識符 0001 測試項 add模塊 用例: 1。
5、 1 2。 lee 3。 123 4。 1234567890 5. 13 6。 n 7。 m 8。 1994 11 33 9. 1994 2 29 10。 1994 11 31 11. 1994 2 28 12. anhui 13。 bozhou 14。 shatu 15。 lizhuang 16。 123 17. 18329901004 18. 731261371@qq。com 輸入正確選擇 輸入姓名 輸入錯誤的學(xué)號 輸入正確的學(xué)號
6、 輸入錯誤的年齡 輸入錯誤的性別 輸入正確的性別 輸入日期超過31天 非閏年二月天數(shù)為29天 輸入非大月天數(shù)為31天 輸入正確的日期 輸入province 輸入city 輸入county 輸入village 輸入錯誤的電話號碼 輸入正確的電話號碼 輸入郵箱 測試用例間的關(guān)聯(lián) 2. 刪除模塊功能測試: 測試能否按學(xué)生姓名或者學(xué)號正確刪除學(xué)生信息。 流程圖及測試用例:如下圖。 字段名稱 描述 標(biāo)識符 0002 測試項 delete模塊 1。2 2.2 3。100001 4.y 5.2 6。2 7。1000000002 8.n
7、 9。2 10。1 11.lucky 12。y 13.2 測試用例間的關(guān)聯(lián) 0001 (2) 3、修改模塊功能測試: 測試能否正確的按要求修改學(xué)生信息并保存. 流程圖及測試用例:如下圖. 字段名稱 描述 標(biāo)識符 0003 測試項 modify模塊 用例: 1.3 2.5 3。1 4.lucky 5.lee 6。1 7。Lucky 8。1 9.y 10.y 11。2 12.22 13。1000000002 14。3 15。y 16。3 17.23 18.Y 19.4 20.Y 21。4 22。F 23
8、。Y 24。Y 25。5 26。2048 8 25 27.1993 3 3 28.X 29。Y 30。Y 31.6 32.Anhui bozhou shatu lizhuang 33.Y 34.Y 35.7 36。18329901004 37。Y 38.Y 39.8 40。73126****@xx。com 41。Y 42。n 按照修改模塊流程圖輸入 測試用例間的關(guān)聯(lián) 0001 (3) 4、 查找功能功能測試: 測試能否按照學(xué)生姓名或者學(xué)號正確的查找到學(xué)生信息。 流程圖及測試用例:如下圖。 (4) 字段名稱 描述 標(biāo)識符 0004
9、 測試項 search模塊 用例: 4 5 1 Hans Lee 4 2 5 2 123 1000000001 按照查找模塊流程圖輸入 測試用例間的關(guān)聯(lián) 0001 5、排序模塊功能測試: 測試能否根據(jù)學(xué)生學(xué)號正確排序. 測試用例:如下圖. 6、其他功能及缺陷測試: 顯示功能以及菜單顯示功能還有系統(tǒng)退出功能。有的模塊并不能很好的處理好用戶隨意格式的輸入,并不能很好的友好顯示錯誤。如增添模塊的用例所示,程序陷入死循環(huán)。 2.4 .1功能性 A. 可以合理增添查詢學(xué)生信息. B. 可以刪除學(xué)生信息. C. 可以合理修改學(xué)生信息.
10、 D. 可以查詢到任意已錄入學(xué)生信息。 E. 可以對已錄入學(xué)生進(jìn)行排序。 F. 可以輸出顯示學(xué)生信息。 2。4。2 易用性 程序界面提示友好豐富,可以很好的根據(jù)提示完成操作. 2。5 單元測試及其測試用例 Add等價類劃分 Add等價類劃分—-name 輸入 合理等價類 不合理等價類 姓名 1.合理的名字 2.有數(shù)字 3。有特殊字符(除連字符外) 測試用例:2.123 3。\\\ Add等價類劃分——school number 輸入 合理等價類 不合理等價類 學(xué)號 1。數(shù)字字符 2.有非數(shù)字字符 測試用例:2.asd4564
11、56\ Add等價類劃分-—age 輸入 合理等價類 不合理等價類 年齡 1.數(shù)字字符 2。有非數(shù)字字符 測試用例:2。asd Add等價類劃分--sex 輸入 合理等價類 不合理等價類 性別 1。m或f 2.非m或f的任意字符 測試用例:2。man Add等價類劃分—-brithday 輸入 合理等價類 不合理等價類 生日日期 1.6—8位數(shù)字字符和2位空格字符 2。有非數(shù)字字符 3.少于6位數(shù)字字符 4。多于8位數(shù)字字符 5。不是2位空格字符 年份范圍 6。在1985-2000之間 7.小于1985 8。大于2000 月份范圍
12、 9。在1-12之間 10.等于0 11。大于12 日期范圍 12.當(dāng)為閏年2月時在1—29之間 13。當(dāng)為平年2月時在1—28之間 14。當(dāng)為1,3,5,7,8,9,12月時在1—31之間 15。當(dāng)為其他月時在1—30之間 16.等于0 17。 當(dāng)為閏年2月時大于29 18.當(dāng)為平年2月時大于28 19。當(dāng)為1,3,5,7,8,9,12月時大于31 20。當(dāng)為其他月時大于30 測試用例:2。asdc 6 25 3.2014 4.2014625625625 5。2014\6\24
13、7。1111 6 24 8。3333 6 24 10. 2014 0 1 11.2014 13 33 16.2014 1 0 17.2008 2 31 可以檢查出錯誤 18。2013 2 29 可以檢查出錯誤 19.2013 1 33 可以檢查出錯誤 20. 2013 4 33 可以檢查出錯誤 Add等價類劃分—-city 輸入 合理等價類 不合理等價類 城市 1.現(xiàn)有的城市名
14、稱 2。字符的隨意組合 測試用例:wo Add等價類劃分——county 輸入 合理等價類 不合理等價類 國家 1?,F(xiàn)有國家名稱 2.字符的隨意組合 測試用例:wo Add等價類劃分——village 輸入 合理等價類 不合理等價類 城鎮(zhèn) 1?,F(xiàn)有城鎮(zhèn)名稱 2.字符的隨意組合 測試用例:wo Add等價類劃分—-phone number 輸入 合理等價類 不合理等價類 手機(jī)號 1.以1開頭的 11位數(shù)字字符 2.非數(shù)字字符 3。少于11 4.多于11 5.不以1開頭 測試用例:2.aaaaaaaaaaa 可以檢查出錯誤
15、 3.aa 4.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 5。01314151617 可以檢查出錯誤 Add等價類劃分——e-mail address 輸入 合理等價類 不合理等價類 郵箱號 1.符合郵箱地址規(guī)則 2。不符合地址規(guī)則 測試用例:123#123#123# Delete等價類劃分 Delet等價類劃分——Search 輸入 合理等價類 不合理等價類 選擇 1。1或2 2。非1或2的其他數(shù)字字符 3。其他字符 測試用例:2。3
16、 可以檢查出錯誤 3.a Delet等價類劃分-—change 輸入 合理等價類 不合理等價類 選擇 1.y或n或Y或N 2.其他字符 測試用例:2。a 可以檢查出錯誤 Modify等價類劃分 Modify等價類劃分——Search 輸入 合理等價類 不合理等價類 選擇 1。輸入1或2 2。非1或2的其他數(shù)字字符 3。其他字符 測試用例:2。3 可以檢查出錯誤 3.a Modify等價類劃分——name或number 輸入 合理等價類 不
17、合理等價類 選擇 1。存入的名字或?qū)W號 2。任意的字符 測試用例:2.123 可以檢查出錯誤 Modify等價類劃分——option 輸入 合理等價類 不合理等價類 選擇 1.輸入1-8之間的任意數(shù)字 2.非1或8的其他數(shù)字字符 3.其他字符 測試用例:2.0 可以檢查出錯誤 3.a 2。6 集成測試 2。6.1 集成測試概要 2.6。1.1 集成測試定義 此階段測試基于單元測試的完成。主要目的檢測系統(tǒng)是否達(dá)到需求對業(yè)務(wù)及數(shù)據(jù)流的處理是否
18、符合標(biāo)準(zhǔn),檢測系統(tǒng)對業(yè)務(wù)流處理是否存在邏輯不嚴(yán)謹(jǐn)及錯誤檢測需求是否存在不合理的標(biāo)準(zhǔn)及要求。 2.6. 2 集成測試實現(xiàn) 此階段將前面的模塊測試進(jìn)行匯總由于大多數(shù)測試已經(jīng)做過,匯總一起就只進(jìn)行了簡單的測試看是否各模塊之間有影響。 2.7 系統(tǒng)測試 2.7.1 系統(tǒng)測試概要 2.7.1.1 系統(tǒng)測試定義 用于核實用戶與軟件之間的交互.系統(tǒng)測試的目標(biāo)是確保用戶界面會通過測試對象的功能來為用戶提供相應(yīng)的訪問或瀏覽功能。 2.7.1.2系統(tǒng)測試實現(xiàn) 主要通過功能測試實現(xiàn)。與綜合測試相同。 3.改進(jìn)建議 在整個系統(tǒng)測試執(zhí)行期間,項目組開發(fā)人員能夠提出的各種缺陷,在
19、一定程度上較好地保證了測試執(zhí)行的效率以及測試最終期限。但是在整個軟件測試活動中還是暴露了一些問題,如,測試執(zhí)行時間相對較少,測試通過標(biāo)準(zhǔn)要求較低;細(xì)節(jié)性錯誤較多,測試時對管理平臺不夠熟悉,使用時效率偏低;測試時對系統(tǒng)了解不夠透徹,測試執(zhí)行時存在理解偏差,導(dǎo)致提交無效缺陷。通小組的協(xié)力合作,學(xué)生信息管理系統(tǒng)如期完成并達(dá)到交付標(biāo)準(zhǔn). 建議:需求提出方可以再使用該系統(tǒng)的基礎(chǔ)上,繼續(xù)搜集用戶的使用需求反饋,并結(jié)合市場同類產(chǎn)品的優(yōu)勢,在今后的版本中不斷補(bǔ)充并完善功能。 l 在項目開始的時候應(yīng)該制定編碼標(biāo)準(zhǔn),需求變更標(biāo)準(zhǔn),開發(fā)和測試人員都嚴(yán)格按照標(biāo)準(zhǔn)進(jìn)行,可以在后期減少因為開發(fā),測試不一致而導(dǎo)致的問題
20、,同時也可以降低溝通成本. l 發(fā)布版本的時候,正確布置測試環(huán)境,減少因為測試環(huán)境出現(xiàn)的無效bug. l 開發(fā)人員解決bug的時候,填寫bug原因以及解決方式,方便bug的跟蹤。 l 開發(fā)人員在開發(fā)版本上發(fā)現(xiàn)bug,可以通知測試人員,因為開發(fā)人員發(fā)現(xiàn)的bug很有可能在測試版本上出現(xiàn),而測試人員和開發(fā)人員的思路不同,有可能測試人員沒有發(fā)現(xiàn)該bug,而且,這樣可以保證發(fā)現(xiàn)的bug都能夠被跟蹤. 4 測試結(jié)論 存在致命錯誤系統(tǒng)不合格,需要重新修改某些語句。下面從各方面說明系統(tǒng)存在的問題: 4。1 功能 系統(tǒng)正確的實現(xiàn)了用戶對學(xué)生信息增、刪、改、查和排序的需求,小巧便捷。 4。2 易用
21、性 現(xiàn)有系統(tǒng)實現(xiàn)了如下易用性: 1. 輸入方式可理解性 2. 輸入限制的正確性 3。操作提示信息正確性,一致性,可理解性 4。輸入限制提示信息的正確性,可理解性,一致性 5。學(xué)生信息增、刪、改、查及顯示的易用性 現(xiàn)有系統(tǒng)存在如下易用性缺陷: 1. 界面排版不美觀,尤其是顯示學(xué)生信息時 2. 輸入解釋性說明不夠詳盡 4.3 可靠性 現(xiàn)有系統(tǒng)的可靠性控制不夠嚴(yán)密,很多控制是通過用戶輸入,錯誤的輸入有可能引起未知的錯誤,導(dǎo)致系統(tǒng)進(jìn)入死循環(huán)?,F(xiàn)有系統(tǒng)的容錯性不高,如果系統(tǒng)出現(xiàn)錯誤,無返回值,系統(tǒng)易崩潰。此為嚴(yán)重錯誤. 4.4安全性 程序中輸入一些特定序
22、列可能引起死循環(huán)。 5 心得體會 通過本次測試學(xué)生信息管理系統(tǒng)項目,總結(jié)測試階段的測試以及分析測試結(jié)果,基本預(yù)期完成了系統(tǒng),軟件測試的真正意義在于發(fā)現(xiàn)錯誤,而不在于驗證軟件是正確的,再嚴(yán)密的測試也不能完全發(fā)現(xiàn)軟件當(dāng)中的錯誤,要確保軟件基本可用,要加強(qiáng)軟件的響應(yīng)的環(huán)節(jié),還要增強(qiáng)軟件的可移植性和兼容性,白盒測試來解決系統(tǒng)緩沖溢出,黑盒測試來解決用戶交互的bug,從而全方面的提高系統(tǒng)的可用性,健壯性,安全性,穩(wěn)定性,通過小組成員的通力合作,基本完成了軟件功能,但是軟件中還存在很多問題,需要進(jìn)一步完善提高,比如程序中很多函數(shù)的判斷語句帶有scanf()函數(shù),當(dāng)輸入一系列特定的不合理數(shù)據(jù)時會使程序進(jìn)
23、入死循環(huán)。系統(tǒng)有待修改與完善。
6 附件(程序代碼)
#include
24、 ; // mail length // The following constants used in struct ADDRESS const int PROLEN = 10 ; // province length const int CITLEN = 25 ; // city length const int COULEN = 25 ; // county length const int VILLEN = 20 ; // village length int count = 0 ; // actual numbe
25、r of people int choice = 0 ; // user's choice used in the menu struct BIRTHDAY // struct birthday { int year ; int month ; int day ; } ; struct ADDRESS // struct address { char province[PROLEN] ; // store province address char city[CITLEN] ; // sto
26、re city address char county[COULEN] ; // store county address char village[VILLEN] ; // store village address } ; struct STUDENT // struct student { char name[NAMLEN] ; // store name char num[NUMLEN] ; // store school number int age ; char sex ;
27、 struct BIRTHDAY bir ; struct ADDRESS addr ; char phonum[PHOLEN] ; //store phone number char mail[MAILEN] ; // store e—mail address } ; struct STUDENT stu[100] ; // the number of student void Add(void) ; void Get_bir(void) ; // used in Add() to get birthday bool check(s
28、truct BIRTHDAY bir) ; // used in Cet_bir() to check bir’s validity bool leap_year(int year) ; // used in check() to confirm whether it is a leap year void Get_addr(void) ; // used in Add() to get address void Get_phonum(void) ; // used in Add() to get phone
29、number void Get_mail(void) ; // used in Add() to get e—mail address ///////////////////////////////////////////////////////////////// void search_name(void) ; // search by name void search_num(void) ; // search by number (school number) void Display(int i) ; //
30、display the information of someone void Search(void) ; ///////////////////////////////////////////////////////////////// void Modify(void) ; // used to modify student’s information void change(int i) ; // used in Modify() bool yes_or_no(void) ; // used in change() void cha
31、nge_name(void) ; // change information used in search by name void change_num(void) ; // change information used in search by number bool confirm(void) ; // to acquire the user’s confirm void Name(int i) ; // modify name, the following all used in change() void Num(int i)
32、 ; // ..。 void Age(int i) ; // ..。 void Sex(int i) ; // 。。. void Bir(int i) ; // 。。。 void Addr(int i) ; // 。.. void Phonum(int i) ; // ... void Mail(int i) ; // 。。。 ///////////////////////////////////////////////////////////////
33、// void Delete(void) ; // delete information void delete_name(void) ; // delete by name void delete_num(void) ; // delete by number void del(int i) ; //////////////////////////////////////////////////////////////// void Sort(void) ; ///////////////////////
34、///////////////////////////////////////// void Menu(void) ; int get_ch() ; // get user's directive void Show(void) ; int main(void) { int n ; Show() ; Menu() ; while (1) { choice = get_ch() ; switch (choice) { case 1: Add() ; break ; case 2: Del
35、ete() ; break ; case 3: Modify() ; break ; case 4: Search() ; break ; case 5: for (n = 0; n 〈 count; ++ n) Display(n) ; break ; case 6: Sort() ; break ; case 7: Menu() ; break ; case 0: exit(0) ; default: printf(”Incorrect
36、 indirective!\n") ; } } return 0 ; } void Add(void) { printf("Enter your name: ”) ; scanf(”%s",stu[count]。name) ; getchar() ; printf("Enter your school number: ”) ; while(!(scanf("%s",stu[count]。num) && strlen(stu[count].num) == NUMLEN — 1)) printf(”Enter your school number(te
37、n digits),try again: ”) ; getchar() ; printf(”Enter your age: ") ; while(?。╯canf("%d”,&stu[count]。age) && stu[count].age >= 15 && stu[count].age 〈= 30)) printf(”Age ranges from 15 to 30, try again: ") ; getchar() ; printf("Enter your sex: ”) ; while(!(scanf(”%c",&stu[count]。sex) && (s
38、tu[count]。sex == ’m’ || stu[count].sex == 'f'))) printf("The sex is %c?\n”,stu[count]。sex) ; getchar() ; Get_bir() ; // get birthday getchar() ; Get_addr() ; // get address Get_phonum() ; // get phone number Get_mail() ; count ++ ; printf(”Do
39、ne!\n") ; } void Get_bir(void) { printf("Enter your birthday like this: 2015 6 24\n") ; printf("Enter your birthday: ") ; while(!(scanf("%d%d%d", &stu[count].bir。year, &stu[count].bir.month, &stu[count].bir。day) && check(stu[count].bir))) { Sleep(1000); printf("Wrong !
40、! Try again: ") ; } } bool check (struct BIRTHDAY bir) { if (2 == bir.month) if(leap_year(bir.year)) if(bir。day <= 29) return true ; else { printf("%d year %d month has %d days?\n",bir.year,bir。month,bir。day) ; printf(” 2 month has no more than 29 days even
41、 the year is a leap year!!\n”) ; return false ; } else if (bir。day 〈= 28) return true ; else { printf("%d year is not a leap year, so 2 month shouldn’t have more than 28 days\n”) ; return false ; } else if(bir.day 〉 31) { printf("Have you ever seen a mon
42、th that has %d days?\n", bir。day) ; return false ; } if(31 == bir.day) if((bir.month 〈 8 && bir。month%2 == 1) || (bir。month >= 8 && bir。month % 2 == 0)) return true ; else { printf("%d month is not a solar month,so it shouldn't have more than 30 days.\n”,bir。month) ;
43、 return false ; } else return true ; } bool leap_year(int year) { return ((0 == year%4 && year% 100 != 0) || (0 == year%400)) ? true : false ; } void Get_addr(void) { printf(”Enter your province: ”) ; while(!scanf(”%s”,stu[count]。addr.province)) printf("Something went wr
44、ong?。?Try again: ”) ; getchar() ; printf(”Enter your city: ") ; while(!scanf("%s",stu[count]。addr.city)) printf(”Something went wrong!! Try again: ") ; getchar() ; printf("Enter your county: ") ; while(!scanf("%s",stu[count]。addr。county)) printf(”Something went wr
45、ong!! Try again: ”) ; getchar() ; printf(”Enter your village: ") ; while(!scanf("%s",stu[count].addr.village)) printf("Something went wrong!! Try again: ") ; getchar() ; } void Get_phonum(void) { printf(”Enter phone number: ") ; while(!(scanf("%s”,stu[count]。phonum) && (strlen
46、(stu[count].phonum) == PHOLEN - 1 || strlen(stu[count].phonum) == PHOLEN - 5))) printf("Wrong!! Try again: ") ; getchar() ; } void Get_mail(void) { printf(”Enter e—mail address: ") ; while(!scanf(”%s”,stu[count]。mail)) printf(”Wrong!! Try again: ") ; getchar() ; } void S
47、earch(void) { if(!count) printf(”No person??! Please add first.\n") ; else { int choice_12 = 0 ; printf(”Search by name, input 1(one); by number, input 2\n") ; printf("Enter your choice: ”) ; while(!(scanf(”%d",&choice_12) && (1 == choice_12 || 2 == choice_12))) printf("Ent
48、er 1 or 2, Try again: ”) ; switch(choice_12) { case 1: search_name() ; break ; case 2: search_num() ; break ; } } } void search_name(void) { char temp[NAMLEN] ; printf(”Enter the name: ") ; while(scanf("%s",temp)) { int flag = 0 ; for (int i = 0; i 〈
49、 count; ++ i) if (0 == strcmp(temp,(stu+i)-〉name)) { Display(i) ; flag = 1 ; break ; } if (!flag) { printf(”No such student!!\n") ; printf("Enter the name carefully: ") ; continue ; } if (flag) break ; } } void search_num(void) { ch
50、ar temp[NUMLEN] ; printf("Enter the number: ") ; while(scanf("%s”,temp)) { int flag = 0 ; for (int i = 0; i 〈 count; ++ i) if (0 == strcmp(temp,(stu+i)-〉num)) { Display(i) ; flag = 1 ; break ; } if (!flag) { printf("No such person!!\n”) ; prin
51、tf(”Enter the number carefully: ”) ; continue ; } if (flag) break ; } } void Display(int i) { printf("name \tnumber\tage sex\n”) ; printf("%s \t%s\t%d %c\n",stu[i]。name,stu[i]。num,stu[i]。age,stu[i].sex) ; printf(”birthday: %d %d %d\n",stu[i]。bir.year,stu[i].bir。month,stu[
52、i].bir。day) ; printf(”address: %s %s %s %s\n”,stu[i]。addr.province,stu[i].addr.city,stu[i]。addr.county,stu[i].addr.village) ; printf("phone number: %s\te—mail address: %s\n",stu[i].phonum,stu[i].mail) ; } /////////////////////////////////////////////////////////// void Modify(void) { if (
53、!count) printf(”No person!! please add first。\n") ; else { int choice_12 = 0 ; printf(”Search by name, input 1; by number, input 2\n”) ; printf(”Enter your choice now: ") ; while (!(scanf("%d",&choice_12) && (1 == choice_12 || 2 == choice_12))) printf(”Enter 1 or 2. Try again
54、: ”) ; switch (choice_12) { case 1: change_name() ; break ; case 2: change_num() ; break ; } } } void change(int i) { printf("1) name \t2) number \t3) age \t4) sex\n”) ; printf(”5) birthfay \t6) address\t7) phonum\t8) e-mail\n") ; int choice_18 = 0 ;
55、 bool FLAG = true ; while(FLAG) { printf(”Enter the corresponding option: ”) ; while(!(scanf(”%d",&choice_18) && choice_18 < 9 && choice_18 > 0)) printf(”Enter 1 or 2 or ..。 or 8。 Try again: ”) ; switch (choice_18) { case 1: Name(i) ; FLAG = yes_or_no() ; break ;
56、 case 2: Num(i) ; FLAG = yes_or_no() ; break ; case 3: Age(i) ; FLAG = yes_or_no() ; break ; case 4: Sex(i) ; FLAG = yes_or_no() ; break ; case 5: Bir(i) ; FLAG = yes_or_no() ; break ; case 6: Addr(i) ; FLAG = yes_or_no() ; bre
57、ak ; case 7: Phonum(i) ; FLAG = yes_or_no() ; break ; case 8: Mail(i) ; FLAG = yes_or_no() ; break ; } } } bool yes_or_no(void) { getchar() ; char flag = ’0' ; printf("Continue ?(y\\n): ”) ; while(!(scanf(”%c”,&flag) && ('y’ == flag || 'Y’ == flag || ’n
58、’ == flag || ’N’ == flag))) printf("Enter 'y'('Y') or ’n'(’N’)。 Try again: ") ; if ('y' == flag || 'Y' == flag) return true ; else return false ; } void change_name(void) { char temp[NAMLEN] ; printf("Enter the name: ") ; while(scanf("%s”,temp)) { int flag = 0 ; for (i
59、nt i = 0; i < count; ++ i) if (0 == strcmp(temp,(stu+i)—>name)) { change(i) ; flag = 1 ; break ; } if (!flag) { printf("No such student!!\n") ; printf("Enter the name carefully: ") ; continue ; } else break ; } } void change_num(void) { c
60、har temp[NUMLEN] ; printf(”Enter the number: ") ; while (scanf(”%s”,temp)) { int flag = 0 ; for (int i = 0; i 〈 count; ++ i) if (0 == strcmp(temp,(stu+i)->num)) { change(i) ; flag = 1 ; break ; } if (!flag) { printf(”No such person!!\n") ; printf(
61、"Enter the number carefully: ") ; continue ; } else break ; } } void Name(int i) { char temp_name[NAMLEN] ; while(!scanf(”%s”,temp_name)) printf("Enter carefully! Try again: ") ; getchar() ; if (confirm()) { strcpy(stu[i]。name,temp_name) ; printf(”Update suc
62、cessfully!\n”) ; } else printf("Information remains unchanged!\n”) ; } void Num(int i) { char temp_num[NUMLEN] ; while(!(scanf("%s”,temp_num) && 10 == strlen(temp_num))) printf("Enter carefully! Try again: ") ; getchar() ; if (confirm()) { strcpy(stu[i].num,temp_num) ;
63、 printf(”Update successfully!\n") ; } else printf(”Information remains unchanged!\n") ; } void Age(int i) { int temp_age = 0 ; while(!(scanf(”%d”,&temp_age) && temp_age 〈 31 && temp_age > 14)) printf("Age ranges from 15 to 30. Try again: ") ; getchar() ; if(confirm()) { st
64、u[i].age = temp_age ; printf(”Update successfully!\n”) ; } else printf("Information remains unchanged!\n”) ; } void Sex(int i) { char temp_sex = '0’ ; while(!(scanf("%c",&temp_sex) && ('m' == temp_sex || ’f’ == temp_sex))) printf(”Enter ’m’ or ’f'。 Try again: ") ; getchar() ;
65、 if(confirm()) { stu[i]。sex = temp_sex ; printf("Update successfully!\n”) ; } else printf(”Information remains unchanged!\n") ; } void Bir(int i) { struct BIRTHDAY temp_bir ; printf("Enter the birthday like this: 2048 8 15\n") ; printf(”Enter the birthday now: ”) ; while(!
66、(scanf("%d %d %d”, &temp_bir。year, &temp_bir.month, &temp_bir.day) && check(temp_bir))) printf(”Enter carefully. Try again: ") ; getchar() ; if(confirm()) { // the below three statements can be substituted with stu[i]。bir = temp_bir stu[i]。bir.year = temp_bir.year ; stu[i]。bir。month = temp_bir。month ; stu[i].bir。day = temp_bir。day ; printf(”Update successfully!\n”) ; } else printf("Information remains unchanged!\n") ; } void Addr(int i) { struct
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告