c語言課設(shè)點(diǎn)名系統(tǒng)_第1頁(yè)
c語言課設(shè)點(diǎn)名系統(tǒng)_第2頁(yè)
c語言課設(shè)點(diǎn)名系統(tǒng)_第3頁(yè)
c語言課設(shè)點(diǎn)名系統(tǒng)_第4頁(yè)
c語言課設(shè)點(diǎn)名系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、沈 陽 航 空 航 天 大 學(xué) 課程設(shè)計(jì)學(xué) 號(hào) 班 級(jí) 電信1504 姓 名 指導(dǎo)教師 劉 鶴 丹 2016年 9 月 18 日沈陽航空航天大學(xué)課程設(shè)計(jì)任務(wù)書學(xué)院:電子信息工程學(xué)院 專業(yè):電子信息工程 班級(jí):電子 學(xué)號(hào): 題目:隨機(jī)點(diǎn)名系統(tǒng)1、 課程設(shè)計(jì)時(shí)間二、課程設(shè)計(jì)內(nèi)容用C語言編寫軟件完成以下任務(wù):教師在每次上課時(shí),需要對(duì)學(xué)生隨機(jī)點(diǎn)名提問;學(xué)生信息應(yīng)事先保存到文件myfile.dat中。學(xué)生共有8人,名單如下:20013011001 杜永寧 20013011002 王傳華20013011003 殷泳 20013011004 楊柳青20013011005 王麗 20013011006 張華2

2、0013011007 白雪 20013011008 薛峰所謂點(diǎn)名,是指將某位同學(xué)的姓名和學(xué)號(hào)打印到屏幕上,則表示該同學(xué)被點(diǎn)名1次;注意點(diǎn)名的隨機(jī)性,即公正性。三、課程設(shè)計(jì)要求程序質(zhì)量:² 貫徹結(jié)構(gòu)化的程序設(shè)計(jì)思想。² 用戶界面友好,功能明確,操作方便。² 用戶界面中的菜單至少應(yīng)包括“開始點(diǎn)名”、“顯示所有同學(xué)點(diǎn)名情況”、“保存點(diǎn)名”、“退出”4項(xiàng)。² 代碼應(yīng)適當(dāng)縮進(jìn),并給出必要的注釋,以增強(qiáng)程序的可讀性。課程設(shè)計(jì)說明書:² 課程結(jié)束后,上交課程設(shè)計(jì)說明書和源程序。課程設(shè)計(jì)說明書的內(nèi)容參見提供的模板。四、指導(dǎo)教師和學(xué)生簽字指導(dǎo)教師:_ 學(xué)生簽名:

3、_5、 成績(jī)六、教師評(píng)語目錄一、需求分析1二、設(shè)計(jì)分析3三、主要界面截圖5四、技術(shù)要點(diǎn)6五、個(gè)人總結(jié)7六、參考文獻(xiàn)7七、源程序7一、需求分析此程序是為點(diǎn)名而設(shè)計(jì),經(jīng)分析可知,整個(gè)程序的設(shè)計(jì)實(shí)現(xiàn)大致分為四個(gè)模塊,其中每一個(gè)模塊對(duì)應(yīng)一個(gè)功能,他們的功能分別是:程序界面設(shè)計(jì)模塊,文件讀寫模塊,顯示點(diǎn)名情況模塊,隨機(jī)算法模塊。1、程序界面設(shè)計(jì)模塊 主要實(shí)現(xiàn)程序最初運(yùn)行時(shí)程序界面友好、美觀的的構(gòu)型以及簡(jiǎn)明的操作提示;2、文件讀寫模塊 實(shí)現(xiàn)的功能是對(duì)file20.txt文件數(shù)據(jù)的讀取和存儲(chǔ),將文件中的數(shù)據(jù)保存到結(jié)構(gòu)體student中,并將點(diǎn)名次數(shù)通過save函數(shù)保存到文件中;3、顯示點(diǎn)名情況模塊 按照題目

4、的要求將數(shù)據(jù)文件中所有學(xué)生的學(xué)號(hào)、姓名、是否缺席打印到屏幕上;4、點(diǎn)名算法模塊 通過調(diào)用自定義函數(shù)open()和rew()實(shí)現(xiàn)點(diǎn)名,并將被點(diǎn)到的學(xué)號(hào)、姓名、是否缺席打印到屏幕上;除上面介紹的功能之外,程序還具有退出功能,可以在程序的一次運(yùn)行當(dāng)中循環(huán)執(zhí)行所有的功能,并根據(jù)需要終止程序的執(zhí)行。 二、設(shè)計(jì)分析1、整體框架圖隨機(jī)點(diǎn)名系統(tǒng)菜單模塊保存模塊顯示信息模塊 點(diǎn)名模塊創(chuàng)建名單模塊圖1:整體框架圖2、流程圖 2.1.保存函數(shù)流程圖如圖所示,通過rb+的方式打開文件,通過for循環(huán),將結(jié)構(gòu)體中的保存的學(xué)生信息保存到文件當(dāng)中。yesif(fp=fopen("file20.txt",

5、"rb+")=NULL) Noprintf("文件打開失敗n"for(i=0;i<8;i+) if(fwrite(&stdi,sizeof(struct student),1,fp)!=1)yes No printf("文件保存失敗n"); 文件保存成功 關(guān)閉文件圖2 Sa ve 函數(shù)進(jìn)行保存的流程圖2.2、菜單函數(shù)流程圖如圖3所示,通過switch語句進(jìn)行選擇,調(diào)用不同的功能函數(shù),從而達(dá)到實(shí)現(xiàn)各部分功能的作用。if(fp=fopen("file20.txt","ab+")=NUL

6、L)yes No 文件打開失敗 Exit(0)for(i=0;i<8;i+)scanf("%d",&c);switch(c);While(1)真Case 1 否開始點(diǎn)名真 Case 2 否 信息統(tǒng)計(jì)真Case 3; 否學(xué)生信息添加 Case 4 退出 圖3:菜單模塊的流程圖2.3、點(diǎn)名函數(shù)流程圖4所示,通過采用隨機(jī)數(shù)語句隨機(jī)出數(shù)字0-7,然后運(yùn)用switch語句,通過strcmp函數(shù),將結(jié)構(gòu)體中保存的學(xué)生編號(hào)同固定編號(hào)比較,如果相同則輸出該編號(hào)對(duì)應(yīng)的學(xué)生的信息numb=rand()%8+1switch(numb)真caseCase1否strcpy(temp,&

7、quot;20013011001")真Case2strcpy(temp,"20013011002")真Case3trcpy(temp,"20013011003").真Case8否 For(i=0,i<n,i+)yesno輸出peoi.num, 圖4:點(diǎn)名函數(shù)流程圖三、主要界面截圖 圖5.主界面 圖6 開始點(diǎn)名 圖7 顯示所有同學(xué)的點(diǎn)名情況 圖8 保存點(diǎn)名 圖9 保存點(diǎn)名四、技術(shù)要點(diǎn)1、結(jié)構(gòu)體的定義并把原始信息一同定義在結(jié)構(gòu)體成員中,是程序的核心內(nèi)容之一void main() int i,n;int c;FILE *fp;

8、if(fp=fopen("f:myfile.txt","r")=NULL)/文件不存在的時(shí)候/write();else n=reads(st);menu();while(1)scanf("%d",&c);switch(c)case 1:rank_name(st);break; case 2:show(st);break; case 3: save(st);break; case 4:exit(0);從上面的定義中可以看出,結(jié)構(gòu)體類型定義中成員項(xiàng)都有確定的類型和名字,而要使用結(jié)構(gòu)體類型的數(shù)據(jù),必須經(jīng)過兩個(gè)步驟:先由關(guān)鍵字stru

9、ct和用戶定義的結(jié)構(gòu)體名來說明類型,然后在由它們說明變量。2、void write()是自定義函數(shù)它的主要用途是打開預(yù)存的學(xué)生的信息,并把它顯示在屏幕上給老師點(diǎn)名。程序如下:void write()FILE *fp;/定義文件指針/int n,i;if(fp=fopen("f:myfile.txt","a")=NULL) /如果文件已經(jīng)存在,可以追加學(xué)生信息 if(fp=fopen("f:myfile.txt","w")=NULL) / 文件不存在時(shí),創(chuàng)建新文件,輸入學(xué)生信息 printf("文件打開失敗

10、!n"); return;for(i=0;i<N;i+) fprintf(fp,"%st%st%dtn",sti.num,,sti.data); /把學(xué)生信息存放到文件中/ fclose(fp); 3、void save(student peo)FILE *fp;fp=fopen("f:myfile.txt","r+");int i,n;for(i=0;i<N;i+)fprintf(fp,"%st%st%dtn",peoi.num,,peoi.data); f

11、close(fp);void save(student peo)FILE *fp;fp=fopen("f:myfile.txt","r+");int i,n;for(i=0;i<N;i+)fprintf(fp,"%st%st%dtn",peoi.num,,peoi.data); fclose(fp);。如下:void rew() int i;int h=1;int k;char j;FILE *fp;if(fp=fopen("file20.txt","r")=NULL)p

12、rintf("文件打開失敗n");exit(0);printf("*學(xué)生缺席請(qǐng)按'a'進(jìn)行修改*n");printf("*輸入'b'跳出修改*n");while(h)scanf("%c",&j);switch(j)case 'a':printf("缺席學(xué)生學(xué)號(hào)n");scanf("%d",&k);k=k-101;stk.data='Y'break;case 'b':h=0;for(

13、i=0;i<7;i+)fread(&sti,sizeof(struct student),1,fp);printf("%dt%st%cn",sti.num,,sti.data); 4、void save()是保存學(xué)生信息的自定義函數(shù),主要將修改后的學(xué)生信息保存到file20.txt文檔中去,實(shí)現(xiàn)保存功能。程序如下: void save(student peo)FILE *fp;fp=fopen("f:myfile.txt","r+");int i,n;for(i=0;i<N;i+)fprintf(f

14、p,"%st%st%dtn",peoi.num,,peoi.data); fclose(fp);在上面的程序段中,用到了三個(gè)調(diào)用函數(shù)語句進(jìn)行操作,盡管在程序化設(shè)計(jì)中有些重復(fù),但其很方便,應(yīng)用及操作比較簡(jiǎn)單。比如void open()語句是為了打開file20.txt文件并輸出學(xué)生情況進(jìn)行點(diǎn)名,void rew()語句點(diǎn)名是進(jìn)行信息統(tǒng)計(jì),void save()是保存功能的函數(shù),通過它實(shí)現(xiàn)了學(xué)生信息的添加及保存。五、個(gè)人總結(jié)在此次課設(shè)之前我C語言學(xué)的一般,只能勉強(qiáng)應(yīng)付考試,很多概念都非常模糊記不清楚。雖然,我的編程題目并不算難,但是,在這一周的時(shí)間里,經(jīng)過不斷

15、的學(xué)習(xí)與努力及與同學(xué)進(jìn)行探討,還有老師的指導(dǎo),我的C語言編程終于能圓滿完成。雖然程序還有一定的瑕漬,但我以盡力完成了。我感到C語言程序設(shè)計(jì)確實(shí)是一門很有用的學(xué)科,所以這次課設(shè)并不是一個(gè)結(jié)束,而是一個(gè)開始,一個(gè)對(duì)C語言更深入學(xué)習(xí)的開始。六、參考文獻(xiàn)1 譚浩強(qiáng) C程序設(shè)計(jì) 北京:清華大學(xué)出版社,20052 Prata,s.  C Primer Plus.  北京:人民郵電出版社,2005七、源程序#include <stdlib.h>#include <stdio.h>#in

16、clude<string.h>#include <math.h>#define N 8 struct studentchar num20; char name10; int data;st8="20013011001","杜永寧",0,"20013011002","王傳華",0,"20013011003","殷泳",0,"20013011004","楊柳青",0,"20013011005",&

17、quot;王麗",0, "20013011006","張華",0,"20013011007","白雪",0,"20013011008"," 薛峰",0;void menu()printf("*n");printf("*MENU*n");printf("*歡迎使用教師上課點(diǎn)名系統(tǒng)*n");printf("* 輸入1:開始點(diǎn)名 *n");printf("* 輸入2:顯示所有同學(xué)點(diǎn)名

18、情況 *n");printf("* 輸入3:保存點(diǎn)名 *n");printf("* 輸入4: 退出 *n"); printf("*n");void write()FILE *fp;/定義文件指針/int n,i;if(fp=fopen("f:myfile.txt","a")=NULL) /如果文件已經(jīng)存在,可以追加學(xué)生信息 if(fp=fopen("f:myfile.txt","w")=NULL) / 文件不存在時(shí),創(chuàng)建新文件,輸入學(xué)生信息 pr

19、intf("文件打開失??!n"); return;for(i=0;i<N;i+) fprintf(fp,"%st%st%dtn",sti.num,,sti.data); /把學(xué)生信息存放到文件中/ fclose(fp);int reads(struct student peoN) / 讀取學(xué)生文件中數(shù)據(jù)存到結(jié)構(gòu)體中并返回結(jié)構(gòu)體數(shù)組元素個(gè)數(shù)/ FILE *fp; int i=0; if(fp=fopen("f:myfile.txt","r")=NULL)/文件不存在的時(shí)候/ printf(&qu

20、ot;文件打開失??!n"); return 0; else/文件存在時(shí)/ for(i=0;!feof(fp);i+)/用循環(huán)將文件中的數(shù)據(jù)讀入到結(jié)構(gòu)體中/ fscanf(fp,"%s %s %d n",peoi.num,,&peoi.data); fclose(fp); return i;/返回結(jié)構(gòu)體數(shù)組元素個(gè)數(shù)/void rank_name(student peo)int numb,n,i;char temp20;numb=rand()%8+1;switch(numb)case 1:strcpy(temp,"200130110

21、01");break;case 2:strcpy(temp,"20013011002");break;case 3:strcpy(temp,"20013011003");break;case 4:strcpy(temp,"20013011004");break;case 5:strcpy(temp,"20013011005");break;case 6:strcpy(temp,"20013011006");break;case 7:strcpy(temp,"20013011007");break;case 8:strcpy(temp,"200

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論