




已閱讀5頁,還剩14頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言課程設計報告電子投票系統學 院 計算機學院 專 業 年 級 姓 名 學 號 教 師 年 月 日廣東工業大學計算機學院制一.設計題目電子投票系統二課程設計目的了解軟件工程中的一些系統分析,模塊分析,代碼設計的概念,利用WIN-TC實現學生成績管理系統的錄入、查詢、刪除、統計等基本操作,使用單鏈表結構實現學生成績管理,了解數據庫管理的基本功能,掌握C語言中的結構體、指針、函數(系統函數、自定義函數)、文件操作等知識。通過對系統的分析和設計,進一步鞏固C語言的學習,以提高對開發環境的進一步認識和綜合編程能力。三 系統功能本系統程序功能:(1)投票者功能a.瀏覽所有候選人資料b.查詢要了解的候選人的信息c.在了解候選人之后進行投票(2)管理員功能a.創建新的候選人資料b.創建新的用戶資料c.查詢要了解的候選人資料d.瀏覽所有的候選人資料e.對候選人票數進行統計并排序四系統功能模塊結構圖本程序利用單鏈表存儲結構完成對學生成績的動態管理,其基本功能模塊如下圖所示:電子投票系統驗證賬號密碼投票人管理員瀏覽候選人瀏覽候選人添加投票人查找候選人添加候選人查找候選人查看投票結果投票 圖1程序功能模塊結構圖五程序設計及各模塊函數功能簡述1數據結構鏈表是線形表的一種,線形表分為順序存儲結構和鏈式存儲結構。線形表的順序存儲結構的特點是邏輯關系上相鄰的兩個元素物理位置上也相鄰,因此可以隨機存取表中任一元素。鏈式存儲結構的特點是用一組任意的存儲單元存儲線形表的數據元素。鏈表的最大的優點是對表的添加、刪除、查找、排序等操作比較方便,因此采用鏈表來存儲候選人,投票人相關信息。且對結點的定義如下:ttypedef struct candidate/候選人數據結構體 long number;/候選人編號 char name20;/候選人姓名 char intro400;/候選人簡介 int vote;/候選人得票數candidate;typedef struct user/投票者數據結構體 char name20;/投票者姓名 char ps8;/對應密碼 int power;/權限user;2.main()主函數主函數是程序入口,采用模塊化設計。創建用戶文檔,進行賬號密碼驗證并根據賬戶不同調用不同函數進入不同的界面,執行不同的功能3main_a()管理員界面根據輸入數字的不同調用不同的函數進入對應的功能,返回主函數。相關的一些函數如下:addcandidate(); / 創建候選人 addUser();/創建投票者 search(); /查詢候選人信息 scan();/瀏覽候選人信息sort();/整理所有投票對菜單選項的選擇是輸入對應數字按回車鍵進行選擇。4main_v(); 投票者者界面根據輸入數字的不同調用不同的函數進入對應的功能,返回主函數。相關的一些函數如下:search(); /查詢候選人信息scan();/瀏覽候選人信息vote(); /投票者投票對菜單選項的選擇是輸入對應數字按回車鍵進行選擇。5addcandidate(); 創建候選人當用戶選擇該項對應數字后,進入該函數。創建候選人文檔,輸入候選人信息。用for語句和if語句檢查編號、姓名是否重復。在確認不再創建新候選人信息后輸出所有候選人信息。6addUser()創建用戶當用戶選擇該項對應數字后,進入該函數。創建用戶文檔,輸入用戶賬號與密碼。用for語句和if語句檢查賬號名是否重復。在確認不再創建新用戶信息后輸出所有用戶信息。7read()讀取候選人信息打開候選人文檔,提取文檔內內容8scan()瀏覽候選人信息先調用read()讀取候選人信息,利用for語句輸出。9search() 查詢候選人信息先調用read()讀取候選人信息,利用for語句查找與輸入編號一致的候選人信息并輸出,若查無此編號則輸出“對不起,沒有您要查詢的候選人”。10. sort()整理所有投票先調用read()讀取候選人信息,利用for語句,使用選擇法對投票數進行排序,并輸出。11. vote()投票者投票先調用read()讀取候選人信息,輸入候選人相應編號,利用for語句,將對應候選人的投票數1,并返回到文檔中,輸出投票結果。若查無此編號,輸出“投票失敗!您要投票的號碼不存在”。六結果初始界面 分別輸入1,1進入管理員界面創建新候選人輸出候選人信息投票者界面投票以及投票結果候選人票數排序結果七心得體會 在本次課程設計中,先使用結構化分析方法對系統進行分析,將整個系統細分為幾個模塊,再針對每個小模塊編寫代碼。通過本次課程設計的學習以及老師的指導,學會了很多東西,了解了開發一個系統的一些步驟。盡管大部分都參考權威書籍的代碼,但是在編寫代碼過程中還是加深了對鏈表的了解程度。開發工具用的是vc+6.0。這個程序還存在很多需要改進的地方,如密碼輸入后直接顯示了出來,而不是*,缺少安全性;每個投票人不僅僅只能投一票等等。但我會繼續努力學習,爭取寫出更好的程序源代碼#include#include#include#include#define closegr closegraph#define N 30void main_a(); /管理員界面void main_v(); /投票者者界面void addcandidate(); / 創建候選人void addUser();/創建投票者void search(); /查詢候選人信息void scan();/瀏覽候選人信息void vote(); /投票者投票void read();/讀取候選人信息void save();/存儲候選人信息void sort();/整理所有投票int total=0,c_total=0;int i=0;typedef struct candidate/候選人數據結構體 long number;/候選人編號 char name20;/候選人姓名 char intro400;/候選人簡介 int vote;/候選人得票數candidate;typedef struct user/投票者數據結構體 char name20;/投票者姓名 char ps8;/對應密碼 int power;/權限user;candidate c_manN;user total_userN;void main_v()/投票者者界面 int key;do printf(*n);printf(*歡迎進入投票員界面*n);printf(*n);printf(* 1.瀏覽所有候選人 2.查詢候選人信息 *n); printf(* 3.投票 4.退出 *n); scanf(%d,&key);switch(key) case 1:scan();break; case 2:search();break; case 3:vote();break; case 4:break; default:break; while(key!=4);void vote() /投票者投票 long candidatenum;/定義進行操作時的臨時結構體變量 int i,flag; char DataFile20=候選人.txt,next;/ DataFile存儲候選人信息的文件名,next為是否進行下一次投標操作的選項 candidate TempS; FILE *fp;begin: flag=0;/flag用來標志是否找對應編號,即投票是否成功 read(); printf(請輸入您要投票的候選人的號碼:); scanf(%ld,&candidatenum); printf(您所投票的候選人號碼是:%ldn,candidatenum); for(i=0;ic_total;i+) if(c_mani.number=candidatenum) flag=1; c_mani.vote+; if(flag) printf(投票成功n); fp=fopen(DataFile,wb); if(fp=NULL)/如果當前文件不存在,提示打開文件失敗 printf(nOpen file is fail!End with any key.n,DataFile); perror(Open file fail); getch(); exit(1); for(i=0;ic_total;i+) fwrite(&c_mani,sizeof(candidate),1,fp); fclose(fp); else printf(投票失敗!您要投票的號碼不存在n); printf(按任意鍵返回首頁! n); getch(); return; fp=fopen(DataFile,rb);/ 顯示投票后的情況 if(fp=NULL) printf(nOpen file %s fail! End With any key n,DataFile); perror(Open file fail); getch(); exit(1); printf(整理后的最新投票情況:n); printf(n候選人號碼 t候選人姓名 t票數n); while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL) if(TempS.number!=0) printf(n%ld t%s t%d n,TempS.number,TempS.name,TempS.vote); fclose(fp); printf(n繼續嗎?是(Y)/否(N): ); fflush(stdin); next=getchar(); putchar(n); if(next=y|next=Y)goto begin;void main_a()/管理員界面 int key;do printf(*n);printf(*歡迎進入管理員界面*n);printf(*n);printf(* 1.創建新候選人 2.創建新用戶 *n); printf(* 3.查詢候選人信息 4.瀏覽所有候選人 *n); printf(* 5.整理所有投票 0.退出 *n); scanf(%d,&key);switch(key) case 1:addcandidate();break; case 2:addUser();break; case 3:search();break; case 4:scan();break; case 5:sort(); break; case 0:break; default:break; while(key!=0);void addcandidate()/創建候選人 char DataFile20=候選人.txt; FILE * fp=NULL; char c; int over_flag=0; candidate TempS; read(); fp=fopen(DataFile,ab+); do printf( *創建新候選人*n); printf(請輸入:); printf(候選人號碼:);scanf(%ld,&TempS.number); for(i=0;ic_total;i+)/檢查輸入編號是否有重復 if(TempS.number=c_mani.number) printf(該號碼已存在.按任意鍵瀏覽所有候選人.); getch(); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 姓名:);scanf(%s,&TempS.name); TempS.name19=0; for(i=0;ic_total;i+) if(strcmp(TempS.name,c_)=0) printf(該姓名已存在!請再輸入一次!按任意鍵繼續.); getch(); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 簡介:); fflush(stdin); gets(TempS.intro); TempS.intro399=0; TempS.vote=0; c_manc_total=TempS;/將數據加入原始數據,用于下一次輸入比較 c_total+; if(fwrite(&TempS,sizeof(candidate),1,fp)!=1) printf(nwrite file is fail! End with any keyn,DataFile); perror(write file fail); getch(); exit(1); printf(要繼續創建新的候選人嗎?是(Y)/否(N): ); fflush(stdin); c=getchar(); while(c=Y|c=y); fclose(fp); printf(候選人資料:n); / 在屏幕上顯示文件內容 printf(*); fp=fopen(DataFile,rb); if(fp=NULL) printf(nOpen file %s fail! 任意鍵結束 n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL) printf(n號碼:%-15ld姓名:%-15s簡介:%s,TempS.number,TempS.name,TempS.intro); fclose(fp); printf(n*); printf(n按任意鍵返回首頁!); getch();void read()/讀取候選人信息 char DataFile20=候選人.txt; FILE * fp=NULL; c_total=0; fp=fopen(DataFile,rb); if(fp=NULL) printf(nOpen file %s fail! 任意鍵結束 n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&c_manc_total,sizeof(candidate),1,fp)!=(int)NULL) c_total+; fclose(fp);void addUser()/創建用戶 FILE *fp=NULL; char DataFile20=用戶.txt;/存儲投票人信息的文件名 user TempS; int over_flag=0; char c; fp=fopen(DataFile,rb);/讀入原始數據,用于檢查輸入是否有重復 if(fp=NULL) printf(nOpen file %s fail! 任意鍵結束 n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&total_usertotal,sizeof(user),1,fp)!=(int)NULL) total+; fclose(fp); fp=fopen(DataFile,ab+); do printf( *創建新用戶* );printf(請輸入:); printf(用戶名:);scanf(%s,&TempS.name); TempS.name19=0; for(i=0;itotal;i+)/檢查輸入姓名是否有重復 if(strcmp(TempS.name,total_)=0) printf(該用戶名已存在!按任意鍵瀏覽所有用戶.); getch(); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 密碼:);scanf(%s,&TempS.ps); TempS.ps7=0; printf( 權限:);scanf(%d,&TempS.power); if(TempS.power!=1) TempS.power=0; total_usertotal=TempS;/將數據加入原始數據 total+; if(fwrite(&TempS,sizeof(user),1,fp)!=1) printf(nwrite file is fail! 任意鍵結束n,DataFile); perror(write file fail); getch(); exit(1); printf(要繼續創建新用戶嗎?是(Y)/否(N):); getchar(); c=getchar(); while(c=Y|c=y); fclose(fp); printf(用戶資料數據處理完畢.n,DataFile);/在屏幕上顯示文件內容 printf(所有用戶具體情況如下:n); fp=fopen(DataFile,rb); printf(*); if(fp=NULL) printf(nOpen file is fail! End With any key n,DataFile); perror(Open file fail); getch(); exit(1); printf(n姓名tt密碼tt權限n); while(fread(&TempS,sizeof(user),1,fp)!=(int)NULL) printf(n%stt%-8stt%dn,TempS.name,TempS.ps,TempS.power); fclose(fp); printf(*); printf(n按任意鍵返回首頁!); getch();void scan()/瀏覽候選人信息 read(); printf(候選人資料:n); printf(*n); for(i=0;ic_total;i+) printf(號碼:%-15ld,c_mani.number); printf(姓名:%-19s,c_); printf(簡介:%sn,c_ro); printf(*); printf(n按任意鍵返回首頁!); getch();void search() /查詢候選人信息 char c; long number; int flag=0; read(); do printf(nt請輸入要查詢的候選人號碼:); scanf(%ld,&number); for(i=0;ic_total;i+) if(number=c_mani.number) printf(t您要查詢的候選人信息如下:nn); printf(t號碼:%ld n,c_mani.number); printf(t姓名:%s n,c_); printf(t簡介:%s n,c_ro); flag=1; break; if (flag) flag=0; else printf(t對不起,沒有您要查詢的候選人n); printf(t要繼續查詢候選人嗎?是(Y)/否(N): ); getchar(); c=getchar(); while(c=Y)|(c=y);void sort()/整理所有投票 int i,k,j; candidate c_man2N/*存放排序后的數據 */, temp; read(); for(i=0;ic_total;i+) c_man2i=c_mani; for(i=0;ic_total-1;i+)/用選擇法排序 k=i; for(j=i+1;jc_total;j+) if(c_man2k.votec_man2j.vote)k=j; if(k!=i) temp=c_man2i;c_man2i=c_man2k;c_man2k=temp; /排序結束 printf(票數從高到低排列如下:n); printf(*n); printf(*號碼 候選人 票數 *n); printf(*n); for(i=0;ic_total;i+) /輸出排序后的結果 printf(* %-13ld %-13s %-6d *n,c_man2i.number,c_,c_man2i.vote); printf(*n); printf(按任意鍵返回首頁!); fflush(stdin); getch();void main() FILE * fp=NULL; char DataFile20=用戶.txt; c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司秋天活動方案
- 公司環境月活動方案
- 內燃機市場全景解讀
- 微博營銷策略如何快速漲粉與互動
- 2024-2030年中國細砂糖行業市場全景評估及投資策略咨詢報告
- 激勵機制與政策環境對企業參與鄉村振興的影響
- 提升煤炭行業員工應對突發情況的心理能力培訓方案研究
- 廣告策劃中制作的實 用技巧
- 中國氧化鐿行業市場調查報告
- 探究式教學法在現代文的閱讀教學中的應用
- 班主任培訓講稿(共12張PPT)
- 外貿合同基礎知識課件
- 病媒生物防制,整改措施
- Q∕SY 1769-2014 油氣井常規鋼絲作業技術規范
- 正常分娩護理查房
- 部編版八年級歷史(下)全冊教案
- 2022年人教版二年級數學(下冊)期末試卷及答案(匯編)
- JIS G3125-2021 高級耐大氣腐蝕軋制鋼材
- (完整版)學生課堂學習自我評價表
- 梁俊嬌稅收籌劃課后思考題
- DTLDTC帶式輸送機工藝流程圖
評論
0/150
提交評論