




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上湖南工業大學課程設計任務書2012 2013學年第 一學期 計算機與通信 學院(系、部) 軟件工程 專業 姓名:夏笑聲 班級 1202 課程名稱: 面向過程程序設計 課程設計 設計題目: 學生信息管理系統 完成期限:自 2012 年 12 月 26 日至 2012 年 12 月28日共 三天內容及任務 用C語言設計一個學生信息管理系統軟件,要求實現以下功能:1.建立文件功能Ø 可以使用默認文件名,或制定文件名將記錄存儲到文件Ø 文件保存成功要有提示Ø 初次使用可以新建一個保存文件2.錄入學生信息功能Ø 可以隨時錄入制定人數信息的
2、功能3.查詢功能Ø 可以通過輸入學號查詢制定學生信息功能Ø 可以通過輸入姓名查詢制定學生信息功能4.刪除記錄功能可以通過學生的姓名或學號信息刪除學生的信息5修改記錄功能可以通過學生的姓名或學號信息修改任意一項指定的信息6按總分排序功能可以按照學生的總分成績排好序將所有學生的信息顯示出來7.退出可以在程序運行時很方便地退出程序進度安排起止日期工作內容第1天程序基本設計思路第2天 編輯核心代碼和程序模塊,修改程序,增加部分功能第3天 再次修改,調試;完成設計文檔和課程設計說明書答辯指導教師(簽字): 2012年12月28日 系教研室)主任(簽字): 年 月 日計算機與通信學院面
3、過程程序設計課程設計題 目 學生信息管理系統 學 號 專業及班級 軟件工程1202 姓 名 夏笑聲 日 期 2012/12/28 目錄1、 實驗目的和要求.41、課程設計的目的42、課程設計的要求4二、設計方案. 41、總體設計.42、系統流程圖.53、 程序說明書.4 三、總結與體會.17四、 參考資料 .18一、 實驗目的和要求1、課程設計目的:1、使學生鞏固和加強“C語言程序設計”課程的理論知識。2、使學生掌握C語言程序設計的方法及編程技巧。3、進一步理解和運用結構化程序設計的思想和方法。、5、 初步掌握開發一個小型實用系統的基本方法:結合實際應用的要求,使課程設計既覆蓋知識點,又接近工
4、程的實際需要。6、培養學生良好的程序設計風格。、7、掌握書寫程序設計開發文檔的能力,使學生學會撰寫課程設計報告。、8、通過查閱手冊和文獻資料,。培養學生獨立分析問題和解決問題的能力。、9、培養學生的創新能力和創新思維。2、基本要求:(1)要求利用結構化程序設計的方法及C語言的編程思想來完成系統設計。(2)模塊化程序設計:要求在設計過程中,按功能定義函數或書寫多個文件,進行模塊化設計,各個功能模塊用函數的形式來實現。(3)學生所選課題必須上機通過,并獲得滿意的結果。(4)程序書寫風格:鋸齒型書寫格式。二、 設計方案1、總體設計 該程序共有6 大模塊構成,程序的開頭首先是一個歡迎界面,歡迎界面的下
5、方有提示信息按回車鍵繼續,這時按下回車鍵,界面跳轉到程序的主界面,各功能菜單項。此程序一共有六大功能,全部通過定義函數來實現功能。主要有以下幾項基本功能:1.信息錄入功能2.信息查詢功能3.刪除記錄功能4.修改記錄功能5.按總分排序輸出所有信息功能,6.退出程序功能。3、程序說明書 此程序在實現功能時采用的方式是編寫函數,通過編寫的5個函數來實現該程序的五大基本功能。主要功能有信息錄入、信息查詢、刪除記錄、修改指定記錄、輸出所有學生信息,以及退出程序功能。首先將一系列頭文件包含進來以及定義文件指針和定義了一個結構數組用來存儲學生的所有信息,源代碼如下:#include<stdio.h&g
6、t;#include<stdlib.h>#include<string.h>#include<process.h>struct nodechar id12;char name15;char fale4;int score3;int all;int _size;student50;struct node2char id12;char name15;char fale4;char score44;char all4;FILE *fr;struct node *p=student;char _class410="C語言","大機&qu
7、ot;,"高數","英語"int number;void luru();void chaxun();void shanchu();void paixu();void xiugai();void main() 打開程序,首先可以看到的是一個精美的歡迎界面,該界面由如下代碼實現:printf("nnnnnnnnnnnn"); printf(" &$&$&$&&$&$&$&$&$&$&$&$&$&&$&$
8、&$&$&$&$&$&n");printf(" &$&$&$&$&&$&&$&$&$&$&$&$&$&$&$&$&&$&$&$&$n");printf(" && * * &$n"); printf(" &$ * * * * &$n");printf(" &
9、amp;$ *歡迎使用學生管理系統* &$n");printf(" &$ &$n");printf(" &$ * * * 制作人:夏笑聲 * * * * * * * * &$n");printf(" &&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$n");printf(" &a
10、mp;$&$&$&$&$&$&$&$&$&$&$&$&$&$&&$&$&$&$&$&$nnnnnnn");printf("nnnnn按回車鍵繼續.");歡迎界面如下圖所示:同時,在屏幕的左下方有按回車鍵繼續的提示信息,這時按一下回車鍵,由歡迎界面跳轉到程序的主功能菜單界面,菜單由switch語句實現,如下:printf("請選擇功能:n"); printf("信息錄入請按1!n
11、"); printf("信息查詢請按2!n"); printf("刪除記錄請按3!n"); printf("修改記錄請按4!n"); printf("按總分排序輸出所有信息請按5!n"); printf("按0或其它任意鍵退出.n");這時,我們在菜單的最上方可以看到一條警示信息,“注意:在第一次使用本軟件之前,必須先建立一個存儲文件”,這是因為此程序需要一個文件來將所有學生的各項信息存儲在外存中,只有這樣才能使已經記錄的信息能夠永久保存。這項功能我采用的是用“w+”的方式打開文件,之
12、所以這樣設計,是因為用“w+” 的方式打開文件使程序獲得的一個額外功能,當按下“8”鍵的時候,可以將所有已經保存的記錄全部清楚掉,即初始化記錄功能,這樣就做到了一舉兩得了。 接下來介紹的是程序的信息錄入功能。在設計信息錄入功能時,我也遇到了不少的問題,其中最大的一個問題就是關于如何將要存儲的程序寫入文件,很顯然,如果將輸入的信息一股腦的寫入文件的話,后果將是非常嚴重的,因為寫入的信息始終是要讀出來的,而如果隨意地寫進去的話,在讀取信息的時候,讀取信息的位置指針將無法定位,因為寫入的時候沒有按照一定的規律。對于這個問題,我采用的解決辦法的將所有學生的信息采用一定的格式寫入文件,學號統一采用11位
13、數字的格式,姓名統一采用占6各字節的格式,性別采用兩個字節也就是一個中文字符的格式,后面是各科分數,全部采用占3個字節的格式,這樣采用一種統一的格式將學生的信息按照順序一個接著一個寫入文件。源代碼如下:for(i=0;i<_n1;i+)printf("請輸入第%d位學生的學號,按0退出此次錄入!:n",i+1);scanf("%s",pnumber.id);getchar(); /用于吃掉回車符if(!(strcmp(pnumber.id,_cheshi5) /設置中途退出功能(如果中途不想繼續輸入的話)fclose(fr); /此句用來控制當中途
14、退出時能將已輸入的信息及時存到外存中break;if(strlen(pnumber.id)!=11)printf("輸入的學號有誤!學號為標準的11位數,請重新輸入:n");i-;continue;elsefprintf(fr,"%s",pnumber.id);loop2:printf("請輸入第%d位學生的姓名(僅支持中文):n",i+1);gets();if(strlen()=0|strlen()>6)printf("姓名長度不符合要求,請重新
15、輸入!n");goto loop2;fprintf(fr,"%s",);a1=strlen();a2=3-(a1/2);for(b2=1;b2<=a2;b2+)fprintf(fr,""); /在姓名不足三個字的后用空格補齊loop7:printf("請輸入性別:n");gets(pnumber.fale);if(strlen(pnumber.fale)!=2)printf("性別輸入有誤,請重新輸入!n");goto loop7;else fprin
16、tf(fr,"%2s",pnumber.fale);pnumber.all=0; /將總分初始化for(j=0;j<4;j+)printf("請輸入第%d位學生的%s成績:n",i+1,_classj);scanf("%s",xj);fprintf(fr,"%-3s",xj);_x1=atoi(x1);_x2=atoi(x2);_x3=atoi(x3);_x4=atoi(x4);_x5=_x1+_x2+_x3+_x4;fprintf(fr,"%-3d",_x5);printf("
17、第%d位學生的信息輸入成功!n",i+1);fclose(fr);printf("錄入結束,按回車回主菜單!n");getchar();getchar();system("cls");elseprintf("a");printf("超出最大人數,請重新輸入!n");在讀取文件時位置指針移動的問題就解決啦。其次是,在信息存儲的過程中,我還考慮到了使用者在使用時可能遇到的盡可能多的問題,如若輸入的學號小于11位,便會有輸入錯誤提醒,還有一個非常使用的是當使用著在進行信息錄入的過程中,可以隨時地退出該功能,在錄
18、入成功后會有錄入成功的提示信息。并且,為了使程序在使用時不會顯得過于呆板,我還在警示信息顯示的同時加入了聲音警示的功能,如學號輸入錯誤不僅有文字提示而且有聲音提示,printf("a");這樣使程序看起來顯得更加人性化。 程序的第二個功能是信息查詢功能。很顯然,沒有查詢的功能,寫得再好的錄入功能也相當于白寫。進入信息查詢功能的菜單鍵是2數字鍵,進入該功能后會有提示輸入要查詢的學生的學號或姓名,在設計該查詢功能時,我采用的是strcmp函數來比較字符串的方式,來將輸入的要查詢的字符與文件中當前有的各信息一一匹配,當找到相同的學號或姓名時,立即退出匹配的循環。源代碼如下:for
19、(i=0;i<50;i+) /將所有學生的學生跟已經錄入的學號配對fscanf(fr,"%11s",_id);fscanf(fr,"%6s",_name);if(!strcmp(shuru,_id)|(!strcmp(shuru,_name)printf("學號:%sn",_id);printf("姓名:%sn",_name);fscanf(fr,"%2s",_fale);printf("性別:%2sn",_fale);for(j=0;j<4;j+)fscanf(
20、fr,"%3s",fen);printf("%s的成績為:%sn",_classj,fen);fscanf(fr,"%3s",_all);printf("總分:%3sn",_all);zhuangtai=0; /標記說明已查找到記錄break;else fseek(fr,16,1); /將光標移到下一次要配對的前一個,以測定該信息是否為最后一條cheshi=fgetc(fr);if(cheshi=EOF)break;if(zhuangtai)printf("a");printf("不存
21、在該學號的學生!n");fclose(fr);printf("按回車鍵回主菜單.n");getchar();getchar();system("cls");查詢的界面如下:這樣寫有一個好處就是使查詢所要提供的信息不僅僅局限于姓名或著是學號,這樣就更方便使用者的需要。若查到結果則在屏幕上顯示已查到的結果:for(i=0;i<50;i+) /將所有學生的學生跟已經錄入的學號配對fscanf(fr,"%11s",_id);fscanf(fr,"%6s",_name);if(!strcmp(shuru,_i
22、d)|(!strcmp(shuru,_name)printf("學號:%sn",_id);printf("姓名:%sn",_name);fscanf(fr,"%2s",_fale);printf("性別:%2sn",_fale);for(j=0;j<4;j+)fscanf(fr,"%3s",fen);printf("%s的成績為:%sn",_classj,fen);fscanf(fr,"%3s",_all);printf("總分:%3sn&
23、quot;,_all);zhuangtai=0; /標記說明已查找到記錄break;else fseek(fr,16,1); /將光標移到下一次要配對的前一個,以測定該信息是否為最后一條cheshi=fgetc(fr);if(cheshi=EOF)break;同樣,在設計此功能時,我也考慮到了查詢信息不存在的問題,當使用者輸入的要查詢的信息不存在時,會有文字和聲音提示“未找到要查詢的記錄”,而且,在執行此功能的過程中,也設置了隨時退出查詢的功能。功能界面如下: 接下來介紹的是刪除記錄功能。同樣,刪除記錄功能也是非常需要的,當某個學生的信息不再需要時,如果繼續保存,將使學生的信息管理變得越來越復
24、雜,因此,刪除多余的記錄是非常有必要的。刪除功能的界面如下:在查找要刪除記錄的位置時,我采用的方式是先將所有信息先存入一個結構數組,源代碼如下:for(i=0;i<50;i+) /先將所有信息讀入一個結構數組_cheshi4=fgetc(fr);if(_cheshi4=EOF)break;elsefseek(fr,-1,1);fscanf(fr,"%11s",student5i.id);fscanf(fr,"%6s",);fscanf(fr,"%2s",student5i.fale);fscanf(f
25、r,"%3s",&student5i.score0);fscanf(fr,"%3s",&student5i.score1);fscanf(fr,"%3s",&student5i.score2);fscanf(fr,"%3s",&student5i.score3);fscanf(fr,"%3s",&student5i.all);至于查找要刪除信息的位置跟信息查詢功能查找的方式是一樣的,即將所輸入的學號或姓名跟已存在的信息一一匹配,當找到要刪除的記錄時,立即退
26、出匹配的循環。源代碼如下:for(j2=0;j2<i;j2+)if(!strcmp(_shuru2,student5j2.id)|!strcmp(_shuru2,)_biaoji=j2;而且還增加了刪除記錄未找到的反應機制if(_biaoji=51)printf("a");printf("未找到要刪除的記錄!n");程序的第四大功能是修改記錄功能。設計此功能的目的是考慮到當使用者只要修改某個學生的某一項信息但又不想修改其他信息時就可以采用修改記錄功能,此功能可以按照使用者的意圖選擇性的修改學生的某項指定的記錄。這樣就比
27、將該學生的記錄全部刪除然后又重新存進去要方便多了。首先要輸入要刪除的學生的姓名或學號,以確定操作對象,代碼如下:printf("請輸入要修改信息的學生的姓名或學號!(按0取消修改)n");scanf("%s",_shuru2);if(strcmp(_cheshi8,_shuru2) /設置退出修改功能fseek(fr,0,0);for(i=0;i<50;i+) _cheshi1=fgetc(fr);if(_cheshi1=EOF)printf("a");printf("未找到要修改的記錄!n");goto l
28、oop8;fseek(fr,-1,1);fscanf(fr,"%11s",student4.id);fscanf(fr,"%6s",);if(!strcmp(_shuru2,student4.id)|(!strcmp(_shuru2,)fseek(fr,17,1);break;elsefseek(fr,17,1);在找到要修改的對象后,就要選擇要修改的項目,使用者可以通過選擇的方式選擇所要修改的項,代碼如下:printf("請選擇要修改的項.n");printf("修改學號
29、請按1n");printf("修改姓名請按2n");printf("修改性別請按3n");printf("修改分數請按4n");scanf("%s",_xiang);xiang=atoi(_xiang);switch(xiang)case 1:printf("請輸入要修改的學號:n");scanf("%s",_xin);if(strlen(_xin)=11)strcpy(student4.id,_xin);elseprintf("a");prin
30、tf("輸入學號有誤,學號為11位數,請重新輸入!n");goto loop3;break;case 2:loop3:printf("請輸入要修改的姓名(僅支持3個字以內中文):n");scanf("%s",_xin);if(strlen(_xin)=0|strlen(_xin)>6)printf("輸入姓名長度不符合要求,請重新輸入!n");goto loop3;strcpy(,_xin);break;case 3:loop4:printf("請輸入要修改的性別.n&qu
31、ot;);scanf("%s",_xin);if(strlen(_xin)!=2)printf("a");printf("性別輸入有誤,請重新輸入!n");goto loop4;elsestrcpy(student4.fale,_xin);break;如果選擇要修改的分數,又會提示讓你選擇要修改分數的科目:case 4:printf("請選擇要修改的成績:n");loop6:printf("C語言請按1n大機請按2n高數請按3n英語請按4.n");scanf("%s",_xu
32、anzhe);xuanzhe=atoi(_xuanzhe);switch(xuanzhe)case 1: printf("請輸入要修改的學號:n");scanf("%s",_xin);if(strlen(_xin)=11)strcpy(student4.id,_xin);elseprintf("a");printf("輸入學號有誤,學號為11位數,請重新輸入!n");goto loop3;break;case 2:loop3:printf("請輸入要修改的姓名(僅支持3個字以內中文):n");s
33、canf("%s",_xin);if(strlen(_xin)=0|strlen(_xin)>6)printf("輸入姓名長度不符合要求,請重新輸入!n");goto loop3;strcpy(,_xin);break; 接下來介紹的程序的第五大功能輸出所有學生信息的功能。當然雜亂地輸出所有信息可以說是好無意義的,因此,我在設計此功能時采用了一個冒泡排序,將所有學生的信息按照總分從大到小依次輸出。具體是先將所有學生的信息先存儲在一個結構數組中:for(_n2=0;_n2<50;_n2+)_cheshi4=fgetc(
34、fr);if(_cheshi4=EOF)fseek(fr,-1,1);break;else ;fseek(fr,-1,1);fscanf(fr,"%11s",student6_n2.id);fscanf(fr,"%6s",student6_);fscanf(fr,"%2s",student6_n2.fale);fscanf(fr,"%3s",student6_n2.score0);fscanf(fr,"%3s",student6_n2.score1);fscanf(fr,"
35、;%3s",student6_n2.score2);fscanf(fr,"%3s",student6_n2.score3);fscanf(fr,"%3d",&_laji);qiu0=atoi(student6_n2.score0);qiu1=atoi(student6_n2.score1);qiu2=atoi(student6_n2.score2);qiu3=atoi(student6_n2.score3);student6_n2.all=qiu0+qiu1+qiu2+qiu3;然后用了一個冒泡排序:for(i=0;i<_jilu+1;i+)for(j=0;j<_jilu-1;j+)if(student6j.all)<(student6j+1.all)student4=student6j;student6j=student6j+1;student6j+1=student4;按總分排好序之后就是輸出信息了,輸出信息的時候,我采用的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國無石棉板行業產業運行態勢及投資規劃深度研究報告
- 新《預算法》實施后地方預算偏離度對財政收入質量的影響研究
- 基于機器視覺的紙杯缺陷檢測研究
- 面向新型電力系統穩定性提升的源網協調控制策略研究
- AlGaN基紫外LED器件仿真與性能優化研究
- 解放渠東油田綜合調整地面工程環評報告
- 聚焦2025:農村電商農產品上行模式創新與品牌建設實戰案例深度解析報告
- 兩性離子富馬酰基聚酯的合成工藝、性能特征及其在化療與光學治療中的應用研究
- 東洞庭湖濕地土壤養分:分布、特征與綜合評價研究
- MSX2、VEGF在肝癌組織中的表達及對預后的影響:機制與臨床關聯研究
- GJB438B《軟件測試報告》模板范例-gjb438資源
- 《治療痤瘡藥》課件
- 住院精神疾病患者自殺風險護理(2023版團標)
- 頑固性感染性休克的ECMO治療課件
- 民兵訓練基地管理制度
- 中等職業學校教職員工績效考核實施方案
- 供應商QSA-QPA評審表(電池)
- 簪花仕女圖賞析課件
- 高考前最后一課-數學
- 班組精細化管理學習體會
- 中國古代考課和考績制度的發展
評論
0/150
提交評論