![電子投票系統(tǒng).docx_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/ade61beb-7144-40b7-8357-3eb531a1cf82/ade61beb-7144-40b7-8357-3eb531a1cf821.gif)
![電子投票系統(tǒng).docx_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/ade61beb-7144-40b7-8357-3eb531a1cf82/ade61beb-7144-40b7-8357-3eb531a1cf822.gif)
![電子投票系統(tǒng).docx_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/ade61beb-7144-40b7-8357-3eb531a1cf82/ade61beb-7144-40b7-8357-3eb531a1cf823.gif)
![電子投票系統(tǒng).docx_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/ade61beb-7144-40b7-8357-3eb531a1cf82/ade61beb-7144-40b7-8357-3eb531a1cf824.gif)
![電子投票系統(tǒng).docx_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/ade61beb-7144-40b7-8357-3eb531a1cf82/ade61beb-7144-40b7-8357-3eb531a1cf825.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、電子投票系統(tǒng)信息工程系計(jì)算機(jī)科學(xué)與技術(shù)5173002142院(系):專業(yè):班級(jí):團(tuán)隊(duì)成員:(1) 姓名:來(lái)紫祥姓名:王澤峰(2) 姓名:石鳳麗姓名:陳陽(yáng)(3) 姓名:賀天浩姓名:胡成(4) 姓名:胡伊童學(xué)號(hào):517300214214學(xué)號(hào):517300214229學(xué)號(hào):517300214225學(xué)號(hào):517300214204學(xué)號(hào):517300214209學(xué)號(hào):517300214210學(xué)號(hào):517300214211指導(dǎo)老師:杜君所在單位:湖北工程學(xué)院新技術(shù)學(xué)院課程設(shè)計(jì)時(shí)間:2019年5月1日至5月18日(6)修改候選人信息請(qǐng)輸入候選人的編號(hào):1001請(qǐng)選擇要修改的內(nèi)容1 .修&候企人姓名2
2、.修改候選人簡(jiǎn)介0.退出*請(qǐng)選擇0到2:2請(qǐng)輸入新的簡(jiǎn)介:學(xué)委是重新輸入編號(hào)?是(Y)/否(N):N(7)刪除候選人信息請(qǐng)輸入候選人編號(hào):1006請(qǐng)確認(rèn)是否刪除!是(Y)/否(N):Y(8)查詢用戶信息adminadminlaizixianglail58720497233086408355按任意鍵返回!.123456789(9)修改用戶信息請(qǐng)輸入用戶的賬號(hào):3086408355請(qǐng)選擇要修改的內(nèi)容1.修改用戶賬號(hào)2 .修改用戶密碼.修改用戶權(quán)限請(qǐng)選擇1到3:2請(qǐng)輸入新的密碼:147258369(10)刪除用戶信息請(qǐng)輸入用戶賬號(hào):3086408355請(qǐng)確認(rèn)是否刪除!是(Y)/否(N):Y刪除成功!
3、是否重新輸入用戶賬號(hào)!是(Y)/否(N):.(11)清空投票信息投票信息清除完成!按任意鍵返回!候選人功能測(cè)試:(1) 瀏覽所有候選人候選人資料:號(hào)碼:1001號(hào)碼:1002號(hào)碼:1003號(hào)碼:1004號(hào)碼:1005號(hào)碼:1006號(hào)碼:1007姓名:王澤峰姓名:陳陽(yáng)姓名:胡成姓名:賀天浩姓名:胡伊童姓名:來(lái)紫住姓名:石鳳麗簡(jiǎn)簡(jiǎn)簡(jiǎn)簡(jiǎn)簡(jiǎn)簡(jiǎn)簡(jiǎn)生生生生生生生學(xué)學(xué)學(xué)學(xué)學(xué)學(xué)學(xué)'.匕.'K_.*2_q.匕._._飛7*._2_!_2_.*>.!,!.、,.、,.,',.、.、,',.、,A、,.,,.、,、,.,A、,、,、,A、,.、,、,.',、.、,*,A
4、、,A、,.,.,.、,、,.,A、,A、,.、*.、,.、,'.,、.、,.、,A、,.、,A,'、,、,,,A、,、,.、*,.、,、,.,.,、,.、,.、按任意鍵返回首頁(yè)!(2) 查詢候選人信息您要查詢的候選人信息如下:號(hào)碼:1007姓名:石鳳麗簡(jiǎn)介:學(xué)生要繼續(xù)查詢候選人嗎?是(Y)/否(N):N(3) 投票瀚疆溷啊°。7mi情況:候選人號(hào)碼候選人姓名票數(shù)1001王澤峰31002陳陽(yáng)21003胡成11004賀天浩11005胡伊童11007石鳳麗4繼續(xù)嗎?是(Y)/否(N):.7.小結(jié)該程序基本達(dá)到了姍結(jié)構(gòu)課程設(shè)計(jì)的要求,但程序還是存在一定的不足之處。其Fe設(shè)置
5、用戶密碼檢測(cè)執(zhí)制,對(duì)密碼的長(zhǎng)度沒(méi)有限制且不能檢測(cè)密碼復(fù)雜度,因此系統(tǒng)安全性不高,可能會(huì)出現(xiàn)不確定性的錯(cuò)誤;其二是修改函數(shù)沒(méi)有檢查機(jī)制,可能會(huì)導(dǎo)致信息重復(fù)。編寫(xiě)過(guò)程中,由于用至|牖秘作,所以遇很多指針指向錯(cuò)誤的問(wèn)題,經(jīng)常導(dǎo)致程序直接崩潰。在運(yùn)行過(guò)程中,發(fā)現(xiàn)出現(xiàn)回車鍵被讀取的IW況,從而導(dǎo)致無(wú)法正常輸入,解決方法是在數(shù)據(jù)輸入輸QAgetcharO函數(shù)。同時(shí)還發(fā)現(xiàn)清空緩沖區(qū)函數(shù)未發(fā)揮作用,因?yàn)镃語(yǔ)言的標(biāo)準(zhǔn)里從來(lái)沒(méi)有定義過(guò)fflush(stdin),某些編譯器如VC6支持用fflush(stdin)來(lái)清空輸入緩沖,但是并非所有編譯器都要支持這個(gè)功能,如linux下的gcc就不支持。在文件i麴田程中,發(fā)
6、現(xiàn)倒iintfeof(FILE*strearn)函躬£法按正確判斷文件是讀取結(jié)尾。因?yàn)閒eof判斷文件結(jié)束是通過(guò)讀取函數(shù)fread/fscanf等返回錯(cuò)i疑識(shí)別的,故而判斷文件是否結(jié)束應(yīng)該是在讀取函數(shù)之后進(jìn)行判斷。比如,在while循環(huán)讀取一個(gè)文件時(shí),如果是在讀取函數(shù)之前進(jìn)行判斷,則如果文件最后一行是空白行,可能會(huì)造成內(nèi)存錯(cuò)誤,C語(yǔ)言沒(méi)有像C廿那樣文件預(yù)讀函數(shù)peek。另外需要注意的是,用指針作為函數(shù)返回值時(shí)需要注意的一點(diǎn)是,函數(shù)運(yùn)行結(jié)束后會(huì)銷毀在它內(nèi)部定義的所有局部娜,包括局部變量、局部數(shù)組和形式參數(shù),函數(shù)返回的指針請(qǐng)盡量不要指向這些施C語(yǔ)言沒(méi)有任何機(jī)制來(lái)保證這甄據(jù)會(huì)一直有效,它們
7、在后續(xù)使用過(guò)程中可能會(huì)引發(fā)運(yùn)行時(shí)錯(cuò)誤(局部變量可能是在棧上創(chuàng)建出來(lái)的,函數(shù)結(jié)束后局剖技量可能會(huì)被銷毀o通過(guò)這次C語(yǔ)言的課程設(shè)計(jì),讓我們從更深一層了解了C語(yǔ)言作用的啾以及C語(yǔ)言的魅力。我們一定要好好掌握C語(yǔ)言方方面面的知識(shí),學(xué)會(huì)編程才倉(cāng)雌出更美好的東西,另外,做這個(gè)課程設(shè)計(jì)的時(shí)彳蛾是參考了很多資料才完成的,所以在編寫(xiě)程序這方面,我們的功力還遠(yuǎn)遠(yuǎn)不夠,需要努力努力,繼續(xù)加強(qiáng)!附錄(程序源代碼)Main,c#includez,evotingsystem.hintmain()InitializationO;WelcomePage();UserLogin();SaveUserlnfo();SaveCan
8、didatelnfo();End_Page();return0;)evotingsystem,httpragmaonce#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>ttdefineNULL0數(shù)據(jù)定義/*候選人信息數(shù)據(jù)結(jié)構(gòu)描述候選人的編號(hào)、姓名、簡(jiǎn)介和得票數(shù)量信息,作為候選人信息記錄存在文件中*/typedefstructcandidatelongnumber;charname20;charintro400:intvote;structcandidate
9、*next;candidate:/*系統(tǒng)用戶數(shù)據(jù)結(jié)構(gòu)描述系統(tǒng)用戶編號(hào)、用戶名、密碼和權(quán)限信息,作為一整條記錄存放在文件中*/typedefstructuser(characcount20:charpassword17;intpower:structuser*next;user;功能定義/*歡迎界面*/voidWelcomePage():/*再見(jiàn)*/voidEndPage();/*管理員界面*/voidAdminPage();/*用戶(投票者)界面*/voidVoterPage();/*創(chuàng)建候選人*/voidCreateCandidate();/*創(chuàng)建用戶*/voidCreatUser();/*
10、查詢候選人信息*/voidQueryCandidatelnfo():/*瀏覽全部候選人信息*/voidBrowseCandidatelnfoO;/*展示單個(gè)候選人信息*/voidDisplayCandidatelnfo(candidate*p);/*展示單個(gè)用戶信息*/voidDisplayUserlnfo(user*p);/*瀏覽全部用戶信息*/voidBrowseUserlnfo();/*用戶投票*/voidVoteO;/*讀取候選人信息*/voidReadCandidatelnfo();/*存儲(chǔ)候選人信息*/voidSaveCandidatelnfo():/*存儲(chǔ)候選人信息*/voidS
11、aveUserlnfo():/*預(yù)讀取文件的下一個(gè)字節(jié)(用來(lái)判斷文件是否到達(dá)結(jié)尾)*/intpeek(FILE*fp);/*初始化加載候選人數(shù)據(jù)加載用戶數(shù)據(jù)*/voidInitialization();/顯示投票情況voidShowVotingSituation();/*從文件讀取用戶信息*/voidReadUserlnfo();/*按票數(shù)從高到低列出所有數(shù)據(jù)*/voidCandidateSort():/*用戶登陸*/voidUserLogin();/*修改投票人信息*/voidModifyCandidatelnfo();/*根據(jù)賬號(hào)搜索用戶信息并返回指向該用戶的指針,沒(méi)該用戶信息則返回空*/
12、user*SearchUser(characcount);/*根據(jù)候選人編號(hào)搜索候選人信息信息并返回指向該用戶的指針,沒(méi)該候選人信息則返回空*/candidateSearchCandidate(longnumber):/*清除投票信息*/voidClearVotelnfoO:/*修改用戶信息*/voidModifyUserlnfo();/*刪除候選人信息*/voidDeleteCandidatelnfoO;/*刪除用戶信息*/voidDeleteUserlnfo();evotingsystem,c#include,zevotingsystem.h/*存儲(chǔ)投票人信息的文件名*/charCandi
13、dateInfoFileName二”Candidatelnfo,dat”;/*用戶信息的文件名*/charUserlnfoFileName="UserInfoFile,dat”;intUserNum=0:intCandidateNum=0;/候選人頭指針candidatecandidatelisthead二NULL;/候選尾指針candidatecandidatelistend=NULL;排序后的候選人頭指針candidate*candidatelisthead2=NULL;/用戶頭指針user*userlisthead=NULL;/用戶尾指針user*userlistend=NUL
14、L;voidReadCandidatelnfo()FILE*fp=NULL;candidate*p二NULL:candidate*s=NULL;CandidateNum二0;candidatelisthead=(candidate*)malloc(sizeof(candidate):candidate1isthead>next=NULL;candidatelistend二candidatelisthead;p二candidatelisthead;fp=fopen(CandidateInfoFi1eName,rb);if(fp=NULL)printf(,znOpenfile%sfail!E
15、ndWithanykeyn,CandidatelnfoFileName);perror(z,0penfilefail");getchO;exit(1);)elsewhile(peek(fp)!二NULL)s=(candidate*)malloc(sizeof(candidate);inta=fread(s,sizeof(candidate),1,fp);s>next=NULL;p->next二s;P二s;candidatelistend=p;CandidateNum+;fclose(fp);voidReadUserlnfo()FILE*fp=NULL;user*p=NUL
16、L;user*s=NULL;UserNum=0;userlisthead二(user*)malloc(sizeof(user);strcpy(userlisthead->account,,superadmin,z);strcpy(userlisthead->password,superadmin);user1isthead->power=1;userlistend二userlisthead;p二userlisthead;p->next=NULL;fp=fopen(UserlnfoFileName,rb);if(fp=NULL)printf(nOpenfile%sfail
17、!EndWithanykeyn,UserlnfoFileName);perror(''Openfilefail");getchO;exit(1);)else(while(peek(fp)!=NULL)s=(user*)malloc(sizeof(user);fread(s,sizeof(user),1,fp);s->next=NULL;p->next=s;P=s;userlistend二p;UserNum+;fclose(fp);/*存儲(chǔ)候選人信息*/voidSaveCandidatelnfo()(FILE*fp二NULL;candidate*p二NULL
18、;fp=fopen(CandidatelnfoFileName,wb);if(fp=NULL)(perror(''writefilefail");getchO;exit(1);)elsefor(p二candidatelisthead->next;p!二NULL;p=p->next)fwrite(p,sizeof(candidate),1,fp);)fclose(fp);/*存儲(chǔ)用戶信息*/voidSaveUserlnfo()FILE*fp=NULL;user*p二NULL;fp二fopen(UserlnfoFileName,wb);if(fp=NULL)(
19、perror("writefilefail");getch();exit(1);else=p->next)=p->next)for(p=userlisthead->next:p!=NULL:pfwrite(p,sizeof(user),1,fp);fclose(fp);intpeek(FILE*fp)chara;intflag=NULL;讀取文件流中的下一個(gè)字節(jié)if(fread(&a,sizeof(char),1,fp)!=NULL)(/將文件指針向后移動(dòng)一個(gè)字節(jié)fseek(fp,-1,SEEK_CUR);flag二1;returnflag;/*初
20、始化加載候選人數(shù)據(jù)加載用戶數(shù)據(jù)*/voidInitialization()(ReadCandidatelnfo();ReadUserlnfo();printf(,z程序初始化成功!n");voidVote()/*臨時(shí)候選人編號(hào)*/longcandidatenum;/*flag用來(lái)標(biāo)志是否找對(duì)應(yīng)編號(hào),即投票是否成功*/intflag=0;待添加功能/*檢測(cè)用戶投票次數(shù)防止多次重復(fù)投票*/intvotetimes=0;/*用來(lái)檢測(cè)是否進(jìn)行下一次投票*/charisnext二'N'candidate*p=NULL;candidate*temp=NULL;do(printfC
21、請(qǐng)輸入您要投票的候選人的號(hào)碼:);scanf(ld,fecandidatenum);printf(您所投票的候選人號(hào)碼是:ldn,candidatenum);if(temp=SearchCandidate(candidatenum)!=NULL)(temp-vote+;printf(,z投票成功n);/*顯示投票后的情況*/ShowVotingSituation();else(isnext='N'printf(投票失?。∧镀钡奶?hào)碼不存在n);printf(按任意鍵返回上一步!n);getchO;getch();printffn繼續(xù)嗎?是(Y)/否(N):);getchO;i
22、snext二getchar();while(isnext='y'|isnext=,Y,);voidShowVotingSituation()candidate*p二NULL;printf(,z最新投票情況:n);printfCAn候選人號(hào)碼t候選人姓名t票數(shù)n);for(p=candidatelisthead->next;p!=NULL;p=p->next)1.需求分析L1問(wèn)題描述投票是選舉的一種表現(xiàn)形式,但是較電子投票來(lái)說(shuō),紙質(zhì)投票方式相對(duì)復(fù)雜。電子投票系統(tǒng)以文件的方式保存候選人信息和用戶信息,并提供投票和查詢功能供用戶查詢和使用投票系統(tǒng)。下面介紹用c語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)
23、易電子投票系統(tǒng),它支持基本的用戶的投票、查找、瀏覽功能,管理員的刪除、查找、排序、新建候選人和用戶功能,以及系統(tǒng)自帶的文件讀寫(xiě)功能。1.2功能描述電子投票系統(tǒng)要求實(shí)現(xiàn)最基本的功能,用戶的投票、查找、瀏覽功能以及管理員的刪除、查找、排序、新建候選人和用戶功能,為此需要首先定義兩個(gè)數(shù)據(jù)結(jié)構(gòu)。其一是候選人,基本屬性包括編號(hào)、姓名、簡(jiǎn)介和票數(shù);其二是用戶,基本屬性包括賬號(hào)、密碼和權(quán)限。整個(gè)系統(tǒng)由如下幾大功能模塊組成。投票人主要功能如下:(1) 投票人的投票方式:在系統(tǒng)提示符下輸入要選舉的選人編號(hào),即可完成投票。(2) 投票人了解候選人的方式:瀏覽候選人列表、輸入序號(hào)查詢候選人介紹。管理員的主要功能如下
24、;初始候選人信息:在系統(tǒng)投入使用前需要將投票選舉的候選人信息錄入系統(tǒng)中,以便投票和查看。管理員的初始化工作就是將候選人的序號(hào)、姓名和簡(jiǎn)介錄入系統(tǒng)。(1) 瀏覽候選人簡(jiǎn)介:為隨時(shí)掌握候選人的信息,以便進(jìn)行修改,管理員有權(quán)瀏覽候選人簡(jiǎn)介。瀏覽的順序按照候選人序號(hào)即可。(2) 修改候選人簡(jiǎn)介:當(dāng)系統(tǒng)更新或候選人信息有所變化時(shí),輸入候選人序號(hào)對(duì)其信息進(jìn)行修改。(3) 查詢投票情況:管理員有權(quán)查詢當(dāng)前各個(gè)候選人得票情況,以便得出最終被選出的候選人信息。(4) 清除投票信息:當(dāng)投票工程結(jié)束后,管理員選擇清除投票信息即清除系統(tǒng)中所有候選人的票數(shù),使之歸零。(5) 安全管理:管理員可以對(duì)投票人進(jìn)行管理,投票人
25、只有用管理員規(guī)定的用戶名和密碼才能進(jìn)入系統(tǒng)進(jìn)行投票。管理員還可以更改用戶名、密碼和權(quán)限,并對(duì)投票人信息進(jìn)行增加、刪除、查詢、排序和初始化等操作。printf(n%ldt%st%dn,p->number,p->name,p->vote):/*創(chuàng)建用戶信息*/voidCreatUser()user*s=NULL;user*p=NULL;intflag=0;charc:s=(user*)malloc(sizeof(user);s->next=NULL;/*讀入原始數(shù)據(jù),用于檢查輸入是否有重復(fù)*/system(cls);dosystem(cls);printf(*6U建新用戶*
26、");printf(,zn請(qǐng)輸入:);printf(n用戶名:);scanfs->account);s->account19='0'/*檢查輸入姓名是否有重復(fù)*/SearchUser函數(shù)用來(lái)搜索if(SearchUser(s->account)!二NULL)printf(,z該用戶名巳存在!);getch();flag=1;elseprintf(密碼:”);scanf(s,&s->password);s>password16二'0'printfC提示權(quán)限只有1和0,如果權(quán)限輸入不在1和0之間那么就默認(rèn)0o提示1為管
27、理員權(quán)限,0為投票人。n);printf(,z權(quán)限:);scanf(d,&(s->power);if(s->power!=1)s->power=0;/*將數(shù)據(jù)加入原始數(shù)據(jù),用于下一次輸入比較*/userlistend->next=s;userlistend二s;UserNum+;printfC要繼續(xù)創(chuàng)建新用戶嗎?是(Y)/否(N):);getchar():c=getchar();while(c='Y'IIc='y');/*在屏幕上顯示文件內(nèi)容*/printfC用戶資料數(shù)據(jù)處理完畢.n);printfC所有用戶具體情況如下:n);y
28、-k4-q*q*q*q*q*q*q*q*q*q*1*4*q*q*q*q*IjL>1*7*7*7*7*1*7*7*T*T*7*1*7*T*7*T*7*)BrowseUserlnfo();printfCzn按任意鍵返回首頁(yè)!);getchO;/*創(chuàng)建候選人*/voidCreateCandidate()candidate*p二NULL;candidate*s=NULL;charc='N'longnumber;system(/cls/,);dosystem(cls);printf(*創(chuàng)建新候選人*n);printfC請(qǐng)輸入:n);printf(候選人號(hào)碼:);scanf(ld,f
29、enumber);/*檢查輸入編號(hào)是否有重復(fù)*/if(SearchCandidate(number)printf(,z該號(hào)碼已存在,按任意鍵結(jié)束!n);getchO;break;elses=(candidate*)malloc(sizeof(candidate);s>next=NULL;s->number=number;printfC姓名:);scanf(s,s->name);s>name19='0'printfC簡(jiǎn)介:);getchar();/scanf正則表達(dá)式用法scanf(n,s>intro);s>intro399='0
30、9;s>vote=0;/*將數(shù)據(jù)加入原始數(shù)據(jù),用于下一次輸入比較*/candidatelistend->next=s;candidatelistend=s:CandidateNum+;printf(要繼續(xù)創(chuàng)建新的候選人嗎?是(Y)/否(N):);getchar();c=getchar();while(c='Y'|c='y');/*在屏幕上顯示文件內(nèi)容*/BrowseCandidatelnfo();/*瀏覽全部候選人信息*/voidBrowseCandidatelnfo()candidate*p二NULL;/*清屏*/system(cls);print
31、f(候選人資料:n);v"»iv-4-/-*(*X*A*4*L*X*1*X*4*1*X*X*X*>1*1*X*X*A*4*1*4*X*1*X*X*X*1*A*4*X*A*v>iIjIZjszjszjszjsZjsXjsZjsZ|SzjszjxzjsXjsZjszjszjsxjszjsZjsZjsxp%ZjsZjsXjXZ|XZjsZjszjsZ|SzjxIIIfor(p二candidatelisthead->next;p!二NULL;p二p->next)DisplayCandidateinfo(p);)-w4-、,)JLLzJLy*y*T*T*T*T
32、*7*T*?*T*T*T*7*T*7*T*T*T*7*?*T*7*T*T*T*7*7*T*T*T*T*T*7*7*T*T*?*T*T*7*7*T*T*T*T*T*T*7*T*T*T*T*T*?*7*T*T*T*T*7*7*T*T*T*)printf(,zn按任意鍵返回首頁(yè)!);getch();/*展示單個(gè)候選人信息*/voidDisplayCandidatelnfo(candidate*p)printf(號(hào)碼:T51d,p->number);printf(姓名:%T9s,p->name);printf(簡(jiǎn)介:sn,p->intro);/*展示單個(gè)用戶信息*/voidDispl
33、ayUserlnfo(user*p)printf(,zn%stt%-8stt%dn/z,p->account,p->password,p->power);/*瀏覽用戶信息*/voidBrowseUserlnfo()system(cls);user*p;printfCn姓名tt密碼tt權(quán)限n);for(p=userlisthead->next;p!=NULL;p=p->next)DisplayUserlnfo(p);)printf(,z按任意鍵返回!);getchar();getchar();/*查詢候選人信息*/voidQueryCandidatelnfo()ch
34、arc='N'longnumber;candidate*p=NULL;do(p二NULL;systeni(cls);printf(nt請(qǐng)輸入要查詢的候選人號(hào)碼:);sc&nf(ld,fenumber);if(p=SearchCandidate(number)!=NULL)system(cls);printf(/zt您要查詢的候選人信息如下:nn);DisplayCandidatelnfo(p);else(printf(t對(duì)不起,沒(méi)有您要查詢的候選人n);printfCAt要繼續(xù)查詢候選人嗎?是(Y)/否(N):);getchar();c=getchar();while(
35、c='Y,)|(c='y');voidCandidateSort()(system(cls);candidate*p,*s;candidate*i;chartemp400;longtemp_num;/*candidatelisthead2用于存放排序后的數(shù)據(jù)*/candidatelisthead2=(candidate*)malloc(sizeof(candidate):p=candidatelisthead2;/*將候選人鏈表復(fù)制一份*/for(i二candidatelisthead->next;i!=NULL;i=i->next)(s=(candidat
36、e*)malloc(sizeof(candidate):s->next=NULL;strcpy(s>name,i->name);strcpy(s->intro,i->intro);s>number=i>number;s>vote=i>vote;p->next=s;P二s;/*用冒泡法排序*/for(p=candidatelisthead2->next;p!=NULL;p=p->next)for(s=p->next:s!=NULL;s=s->next)if(s->vote>p->vote)str
37、cpy(temp,s->name);strcpy(s->name,p->name);strcpy(p->name,temp);strcpy(temp,s>intro);strcpy(s->intro,p->intro);strcpy(p->intro,temp);temp_num二s->number;s->number二p->number;p->number=tempnum;temp_num=s->vote;s>vote=p->vote;p->vote=temp_num;/*排序結(jié)束*/printf
38、(票數(shù)從高到低排列如下:n);printf(*n);票數(shù)*n);p!二NULL;p=p->next)printf(*號(hào)碼候選人printf(*n);/*輸出排序后的結(jié)果*/for(p=candidatelisthead2->next:printf(*%T31d%-13s%-6d*n”,p->number,p->name,p>vote):printf(*n);printf(,z按任意鍵返回首頁(yè)!);getchO;)voidWelcomePage()printf(*電子投票系統(tǒng)*n);printf(z,按任意鍵進(jìn)入系統(tǒng)登錄界面.);getch();system(cls
39、);printf(*歡迎登陸電了投票系統(tǒng)*n);voidEnd_Page()system(cls);printf("nnnnnnr感謝您的參與!n);printf(,znnnnnnr再見(jiàn)!);getchO;/*管理員界面*/voidAdminPage()intkey;dosystem(cls);/*輸出主菜單*/printf(*n);printf(,z管理員界面nr);printf(*n);printf(z,l.創(chuàng)建新候選人n);printf(,z2.創(chuàng)建新用戶n);printf(3.查詢候選人信息n);printf("4.瀏覽所有候選人n);printf(5.整理所有投票
40、n):printf(6.修改候選人信息n);printf(7.刪除候選人信息n);printf(,z8.查詢用戶信息n);printf(z,9.修改用戶信息n");printfC'lO.刪除用戶信息n);printf(ll.清空投票信息n);printf(z,0.退出n);printf(*請(qǐng)選擇0到11:);scanf(d,&key);switch(key)case1:CreateCandidate();break;case2:CreatUser();break;case3:QueryCandidatelnfo();break;case4:BrowseCandidat
41、elnfo();break;case5:CandidateSort();break;case6:ModifyCandidatelnfo();break;case7:DeleteCandidatelnfo();break;case8:BrowseUserlnfo();break;case9:ModifyUserlnfo();break;case10:DeleteUserlnfoO;break;case11:ClearVotelnfoO;break;case0:break;default:break;while(key!=0);End_Page();/*投票者界面*/voidVoterPage()
42、intkey;dosystem(,cls,/);/*輸出主菜單*/printf(*nr);printfC投票者界面nr);printf(*nr);printf("1.瀏覽所有候選人nr);printf(z,2.查詢候選人信息nr);printf(3.投票nr);printfCO.退出nr);printf(*請(qǐng)選擇0到3:);switch(key)case1:BrowseCandidatelnfo();break;case2:QueryCandidatelnfo();break;case3:system(cls);Vote();break;case0:break;default:bre
43、ak;while(key!=0);End_Page();voidUserLogin()(characcount20;charpassword17:inti=0;chart:user*tempuser;/判斷登陸是否成功intlogin_success=0;intlogin_times=0;用來(lái)輸出錯(cuò)信息charerrormessage25=0;判斷用戶是否重新登陸charrelogin='N'do(printf(,z請(qǐng)輸入用戶名:”);scanf(s,account);搜索用戶名temp_user=SearchUser(account);getchar();if(tempuse
44、r!=NULL)(doprintf("n請(qǐng)輸入密碼:);讀取密碼時(shí)用星號(hào)顯示while(1)t二getchO;if(t!二r'&&t!='b')printf(*);passwordi=t;i+;elseif(t=b'&&i!=0)printf(bb);i;elseif(t=r,)passwordi='0'break;/scanf(s,password);if(strcmp(temp_user->password,password)=0)loginsuccess=1;break;elseloginsu
45、ccess=0;login_times+;printfCn密碼錯(cuò)誤,請(qǐng)重新輸入!n);)while(login_times=3);elselogin_success=0;/錯(cuò)誤信息if(loginsuccess=0)strcpy(error_message,賬戶錯(cuò)誤!n);if(logintimes>3)strcpy(errormessage,密碼多次錯(cuò)誤,請(qǐng)聯(lián)系管理員重置密碼!n);判斷登陸是否成功if(loginsuccess=1)(if(temp_user>power=1)system(cls);printfC您是管理員!歡迎您登錄系統(tǒng)!按任意鍵進(jìn)入管理員界面.n);getc
46、hO;AdminPage();2.總體設(shè)計(jì)程序主要包括三大模塊:輸入/輸出模塊、管理模塊和文件操作模塊。輸入/輸出模塊的主要功能是人機(jī)交互,包括程序界面顯示、用戶輸入響應(yīng)、結(jié)果輸出等;管理模塊從輸入/輸出模塊讀取用戶命令并進(jìn)行相應(yīng)的操作,包括錄入、刪除、修改、查找、排序等;文件操作模塊獲取管理模塊中的數(shù)據(jù)或命令,然后進(jìn)行存儲(chǔ)文件的讀寫(xiě),如圖0-1所示。開(kāi)始初始化(加栽數(shù)據(jù))歡迎界面界面設(shè)計(jì)程序的主界面是一個(gè)文本方式的菜單,用戶通過(guò)鍵盤(pán)輸入數(shù)字,選取相應(yīng)的操作命令。3. 詳細(xì)設(shè)計(jì)4.1重要數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)電子投票系統(tǒng)中候選人信息用結(jié)構(gòu)體candidate表示,包含四個(gè)屬性。number屬性是候選人的
47、唯一編號(hào),name、intro、vote分別代表候選人的姓名、簡(jiǎn)介、票數(shù)ostructcandidate*next表示單鏈表的指針域。typedefstructcandidatelongnumber;/*如power的值為0,則是投票者,并調(diào)用投票者界面*/elsesystem(cls);printf(您是投票者!歡迎您登錄系統(tǒng)!按任意鍵進(jìn)入投票者界面.n);getchO;VoterPage();/登陸失敗輸出錯(cuò)誤語(yǔ)句,并詢問(wèn)用戶是否重新登陸elserelogin二'N'printferrormessage);printfC是重新登陸?是(Y)/否(N):);getchar()
48、;scanf(c,ferelogin);logintimes=0;while(relogin='y'|relogin='Y');/*修改候選人信息*/voidModifyCandidatelnfo()system(,cls,/);candidate*temp;longnumber;判斷是否重新輸入charc='N'intflag=0;doprintf(z,請(qǐng)輸入候選人的編號(hào):);scanf(ld,fenumber);if(temp=SearchCandidate(number)!=NULL)(printfC請(qǐng)選擇要修改的內(nèi)容n);printf(,
49、zl.修改候選人姓名n);printf(z,2.修改候選人簡(jiǎn)介n);printf(0.退出);print"*請(qǐng)選擇0到2:);scanffeflag);getchar();switch(flag)case1:printff請(qǐng)輸入新的姓名:);scanf(s,temp->name);break;case2:printf(,z請(qǐng)輸入新的簡(jiǎn)介:);scanf(n,temp->intro);break;case0:break;default:break;elseprintf(/z您輸入的編號(hào)有誤!,按任意鍵繼續(xù)。);getchO;)printfCn是重新輸入編號(hào)?是(Y)/否(N
50、):);getchar();scanf(%c,&c);while(c='Y'|c='y');/*搜索用戶信息并返回指向該用戶的指針,沒(méi)該用戶信息則返回空*/user*SearchUser(char*account)(user*p=NULL;for(p=userlisthead->next:p!=NULL;p=p->next)if(strcmp(account,p->account)=0)break;)returnp;/*搜索候選人信息信息并返回指向該用戶的指針,沒(méi)該候選人信息則返回空*/candidate*SearchCandidate
51、(longnumber)candidate*p二NULL;for(p=candidatelisthead->next;p!=NULL;p=p->next)if(number=p->number)break;returnp;/*清除投票信息*/voidClearVotelnfoO(system(cls);candidate*p;清除投票信息p->next)for(p=candidatelisthead-next;p!=NULL;pp->vote=0;printfC投票信息清除完成!按任意鍵返回!);getchO;/*修改用戶信息*/voidModifyUserlnf
52、o()system(/cls/,);user*temp;characcount20;intflag=0;判斷是否重新輸入charc='N'doprintfC請(qǐng)輸入用戶的賬號(hào):);scanf(s,account);account19='0'getchar();if(temp=SearchUser(account)!=NULL)printf(請(qǐng)選擇要修改的內(nèi)容n);printfCzl.修改用戶賬號(hào)n);printf(/z2.修改用戶密碼n);printf(3.修改用戶權(quán)限n);printfC請(qǐng)選擇1到3:);scanf(d,&flag);switch(fla
53、g)case1:printf(,z請(qǐng)輸入新的賬號(hào):);scanf(s,temp->account);break;case2:printf(z,請(qǐng)輸入新的密碼:);scanf(s,temp->password);break;case3:printf(,z請(qǐng)輸入新的權(quán)限:");scanf(d,&(temp->power);break;default:break;else(printf(/z您輸入的賬號(hào)有誤!,按任意鍵繼續(xù)。n);getchO;)printfC是否重新輸入用戶的賬號(hào)!是(Y)/否(N):);getchar();c二getchar;while(c=,
54、yc=,Y,);voidDeleteCandidatelnfo()(system(cls);candidate*temp;candidate*p;判斷是否重新輸入charc='N'確認(rèn)刪除charcondelet='N'longnumber;doprintf(請(qǐng)輸入候選人編號(hào):);sc&nf(ld,&number);if(temp=SearchCandidate(number)!=NULL)getchar();printfC請(qǐng)確認(rèn)是否刪除!是(Y)/否(N):);condelet二getchar():if(condelet二二'Y'|condelet二二'y')(p=candidatelisthead-next;while(p->next!=temp)p=p->next;)p->next=temp->next;free(temp);printfC刪除成功!n);else(printfC刪除取消!按任意鍵繼續(xù)。n);getchO;else(printfCz您輸入的編號(hào)有誤!);printfC是否重新輸入候選人編號(hào)!是(Y)/否(N):);getc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房產(chǎn)大數(shù)據(jù)合作協(xié)議書(shū)
- 2025年低壓化成箔合作協(xié)議書(shū)
- 2025年減震系統(tǒng)材料合作協(xié)議書(shū)
- 2025年個(gè)人店鋪?zhàn)赓U合同樣本(三篇)
- 2025年中學(xué)設(shè)備供貨合同(2篇)
- 2025年二年級(jí)初中班主任工作總結(jié)樣本(五篇)
- 2025年二手房買賣購(gòu)房合同樣本(2篇)
- 2025年個(gè)人房屋簡(jiǎn)易租賃合同樣本(4篇)
- 2025年代理記賬委托協(xié)議合同格式版(2篇)
- 2025年互聯(lián)網(wǎng)專線電路接入服務(wù)協(xié)議范文(2篇)
- 同等學(xué)力英語(yǔ)申碩考試詞匯(第六版大綱)電子版
- GB/T 21797-2008化學(xué)品有機(jī)磷化合物28天重復(fù)劑量的遲發(fā)性神經(jīng)毒性試驗(yàn)
- 2023年湖北成人學(xué)位英語(yǔ)考試真題
- 睡眠中心課件
- 園區(qū)保安巡邏崗標(biāo)準(zhǔn)作業(yè)規(guī)程
- SJG 112-2022 既有建筑幕墻安全性鑒定技術(shù)標(biāo)準(zhǔn)高清最新版
- 旅游文本的翻譯課件
- 最全新能源材料-鋰離子電池材料189張課件
- 申論詳解(PPT課件)
- 立式加工中心說(shuō)明書(shū)
- 第八版神經(jīng)病學(xué)配套課件-12-中樞神經(jīng)系統(tǒng)感染性疾病
評(píng)論
0/150
提交評(píng)論