學(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é)生信息的管理以及維護的軟件??梢苑奖愕墓芾韺W(xué)生信息,維護以及修改學(xué)生信息。 1。2 項目背景 隨著高校學(xué)生數(shù)量的增多,信息復(fù)雜度增加,十分有必要通過學(xué)生信息管理系統(tǒng)來完成學(xué)生信息的管理,修改及維護。開發(fā)學(xué)生信息管理系統(tǒng)在當今高校是十分有必要的. 1.3 用戶群 使用于學(xué)校. 1。4 基本定義 五類測試錯誤類型。 A類:嚴重錯誤,包括以下各種錯誤: n 由于程序所引起的死機,非法退出 n 死循環(huán) n
2、 因錯誤操作導(dǎo)致的程序中斷 n 功能錯誤 n 數(shù)據(jù)通訊錯誤 B類:較嚴重錯誤,包括以下各種錯誤: n 程序錯誤 n 程序接口錯誤 C類:一般性錯誤,包括以下各種錯誤: n 操作界面錯誤(包括數(shù)據(jù)窗口內(nèi)列名定義、含義是否一致) n 打印內(nèi)容、格式錯誤 n 刪除操作未給出提示 n 與日常生活不符 D類:較小錯誤,包括以下各種錯誤: n 界面不規(guī)范 n 輔助說明描述不清楚 n 錯誤操作未給用戶提示 n 提示窗口文字未采用行業(yè)術(shù)語 1。5 參考資料 [1]《編程思想》,機械工業(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í)行 此次測試嚴格按項目測試計劃執(zhí)行,按時完成了測試計劃規(guī)定的測試對象的測試。針對測試計劃規(guī)定的測試策略,在測試執(zhí)行中都有實現(xiàn),在測試執(zhí)行過程中,依據(jù)測試計劃和測試用例,對系統(tǒng)進行了完整的測試. 2.3 測試用例 1. 增添模塊功能測試: 主要測試學(xué)生信息能否按一定要求與格式正確輸入. 流程圖及測試用例:如下圖。 (1) 字段名稱 描述 標識符 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é)生信息。 流程圖及測試用例:如下圖。 字段名稱 描述 標識符 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é)生信息并保存. 流程圖及測試用例:如下圖. 字段名稱 描述 標識符 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) 字段名稱 描述 標識符 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é)生進行排序。 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.當為閏年2月時在1—29之間 13。當為平年2月時在1—28之間 14。當為1,3,5,7,8,9,12月時在1—31之間 15。當為其他月時在1—30之間 16.等于0 17。 當為閏年2月時大于29 18.當為平年2月時大于28 19。當為1,3,5,7,8,9,12月時大于31 20。當為其他月時大于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。現(xiàn)有國家名稱 2.字符的隨意組合 測試用例:wo Add等價類劃分——village 輸入 合理等價類 不合理等價類 城鎮(zhèn) 1?,F(xiàn)有城鎮(zhèn)名稱 2.字符的隨意組合 測試用例:wo Add等價類劃分—-phone number 輸入 合理等價類 不合理等價類 手機號 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)是否達到需求對業(yè)務(wù)及數(shù)據(jù)流的處理是否
18、符合標準,檢測系統(tǒng)對業(yè)務(wù)流處理是否存在邏輯不嚴謹及錯誤檢測需求是否存在不合理的標準及要求。 2.6. 2 集成測試實現(xiàn) 此階段將前面的模塊測試進行匯總由于大多數(shù)測試已經(jīng)做過,匯總一起就只進行了簡單的測試看是否各模塊之間有影響。 2.7 系統(tǒng)測試 2.7.1 系統(tǒng)測試概要 2.7.1.1 系統(tǒng)測試定義 用于核實用戶與軟件之間的交互.系統(tǒng)測試的目標是確保用戶界面會通過測試對象的功能來為用戶提供相應(yīng)的訪問或瀏覽功能。 2.7.1.2系統(tǒng)測試實現(xiàn) 主要通過功能測試實現(xiàn)。與綜合測試相同。 3.改進建議 在整個系統(tǒng)測試執(zhí)行期間,項目組開發(fā)人員能夠提出的各種缺陷,在
19、一定程度上較好地保證了測試執(zhí)行的效率以及測試最終期限。但是在整個軟件測試活動中還是暴露了一些問題,如,測試執(zhí)行時間相對較少,測試通過標準要求較低;細節(jié)性錯誤較多,測試時對管理平臺不夠熟悉,使用時效率偏低;測試時對系統(tǒng)了解不夠透徹,測試執(zhí)行時存在理解偏差,導(dǎo)致提交無效缺陷。通小組的協(xié)力合作,學(xué)生信息管理系統(tǒng)如期完成并達到交付標準. 建議:需求提出方可以再使用該系統(tǒng)的基礎(chǔ)上,繼續(xù)搜集用戶的使用需求反饋,并結(jié)合市場同類產(chǎn)品的優(yōu)勢,在今后的版本中不斷補充并完善功能。 l 在項目開始的時候應(yīng)該制定編碼標準,需求變更標準,開發(fā)和測試人員都嚴格按照標準進行,可以在后期減少因為開發(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)的可靠性控制不夠嚴密,很多控制是通過用戶輸入,錯誤的輸入有可能引起未知的錯誤,導(dǎo)致系統(tǒng)進入死循環(huán)?,F(xiàn)有系統(tǒng)的容錯性不高,如果系統(tǒng)出現(xiàn)錯誤,無返回值,系統(tǒng)易崩潰。此為嚴重錯誤. 4.4安全性 程序中輸入一些特定序
22、列可能引起死循環(huán)。 5 心得體會 通過本次測試學(xué)生信息管理系統(tǒng)項目,總結(jié)測試階段的測試以及分析測試結(jié)果,基本預(yù)期完成了系統(tǒng),軟件測試的真正意義在于發(fā)現(xiàn)錯誤,而不在于驗證軟件是正確的,再嚴密的測試也不能完全發(fā)現(xiàn)軟件當中的錯誤,要確保軟件基本可用,要加強軟件的響應(yīng)的環(huán)節(jié),還要增強軟件的可移植性和兼容性,白盒測試來解決系統(tǒng)緩沖溢出,黑盒測試來解決用戶交互的bug,從而全方面的提高系統(tǒng)的可用性,健壯性,安全性,穩(wěn)定性,通過小組成員的通力合作,基本完成了軟件功能,但是軟件中還存在很多問題,需要進一步完善提高,比如程序中很多函數(shù)的判斷語句帶有scanf()函數(shù),當輸入一系列特定的不合理數(shù)據(jù)時會使程序進
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(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ī)劃管控述職報告