電子投票系統(tǒng)課程設(shè)計(jì)報(bào)告 文檔在線提供_第1頁(yè)
電子投票系統(tǒng)課程設(shè)計(jì)報(bào)告 文檔在線提供_第2頁(yè)
電子投票系統(tǒng)課程設(shè)計(jì)報(bào)告 文檔在線提供_第3頁(yè)
電子投票系統(tǒng)課程設(shè)計(jì)報(bào)告 文檔在線提供_第4頁(yè)
電子投票系統(tǒng)課程設(shè)計(jì)報(bào)告 文檔在線提供_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

課程設(shè)計(jì)的內(nèi)容編程建立一個(gè)小型電子投票系統(tǒng)二、課程設(shè)計(jì)的要求與數(shù)據(jù)1.開發(fā)環(huán)境:Wintc2.需求分析:電子投票平臺(tái)作為一個(gè)用來進(jìn)行投票統(tǒng)計(jì)的應(yīng)用軟件1)編程建立一個(gè)小型電子投票系統(tǒng),其中包含電子投票、票數(shù)統(tǒng)計(jì)功能,。盡量做到提供一個(gè)簡(jiǎn)單的人機(jī)界面,系統(tǒng)界面友好,使用方便。2)軟件的使用者分為兩類,一類為管理員,可以對(duì)候選人信息進(jìn)行初始化和修改,還可瀏覽候選人信息介紹,可對(duì)候選人的票數(shù)進(jìn)行排序以及對(duì)系統(tǒng)的用戶進(jìn)行管理,創(chuàng)建使用者用戶名和密碼,還可以對(duì)用戶信息進(jìn)行增加、刪除、修改和查詢操作等。另一類為使用者—普通投票者,該類用戶需要用管理員分配的用戶名和密碼正確登錄系統(tǒng),可以查詢候選人介紹、投票等。投票是只需做到輸入自己想要投票的候選人編號(hào)即可完成投票。3.功能需求描述電子投票系統(tǒng)是用來進(jìn)行投票統(tǒng)計(jì)的系統(tǒng)軟件,進(jìn)入投票系統(tǒng)后應(yīng)該需要先進(jìn)行身份驗(yàn)證。如果是投票人,就可以用瀏覽和查詢的方式了解各個(gè)候選人的介紹信息,根據(jù)候選人的介紹信息決定將選票投向哪位候選人。①投票人的投票方式:輸入要選舉的候選人的編號(hào),即可完成投票;②投票人了解候選人的方式:瀏覽候選人列表,輸入序號(hào)查詢候選人介紹。如果是管理人員就可以進(jìn)以下操作:①初始化候選人信息:在系統(tǒng)投入使用前需要先將需要投票選舉的候選人信息錄入系統(tǒng)中,以便投票和查看。管理員的初始化工作就是將候選人的序號(hào)、姓名和簡(jiǎn)介錄入系統(tǒng)。②瀏覽候選人簡(jiǎn)介:為隨時(shí)掌握候選人的信息,進(jìn)行修改,管理員可以瀏覽候選人簡(jiǎn)介。③修改候選人簡(jiǎn)介:當(dāng)候選人信息有所變化時(shí),輸入候選人序號(hào),對(duì)信息進(jìn)行修改。④查詢投票情況:管理員有權(quán)查詢當(dāng)前各個(gè)候選人得票情況.⑤清除投票信息:當(dāng)投票結(jié)束后,管理員可清除系統(tǒng)中所有候選人的票數(shù),使之歸零。⑥安全管理:管理員可以對(duì)投票人信息進(jìn)行管理,投票人只有用管理員規(guī)定的用戶名和密碼才能進(jìn)入系統(tǒng)進(jìn)行投票。管理員還可以更改用戶名、密碼和權(quán)限,并對(duì)投票人信息進(jìn)行增加、刪除、查詢、排序和初始化等操作。4.總體設(shè)計(jì)在對(duì)電子投票平臺(tái)進(jìn)行需求分析之后,接下來進(jìn)行總體設(shè)計(jì)。先用圖表的方式給出系統(tǒng)總體的設(shè)計(jì)架構(gòu),繪制系統(tǒng)模型結(jié)構(gòu)圖,并且通過模塊功能樹圖對(duì)每個(gè)模塊進(jìn)行總體設(shè)計(jì)。電子投票平臺(tái)是一個(gè)簡(jiǎn)易投票管理系統(tǒng),每個(gè)投票者對(duì)候選人投票后系統(tǒng)都要及進(jìn)更新并統(tǒng)計(jì)候選人所得票數(shù)。因此將投票的過程單獨(dú)寫成一個(gè)完整的函數(shù),每次投票動(dòng)作都必須調(diào)用該函數(shù),將得票統(tǒng)計(jì)的文件中對(duì)應(yīng)的候選人得票信息加一。采用程序設(shè)計(jì)中的選擇結(jié)構(gòu),對(duì)大量數(shù)據(jù)的處理要用到循環(huán)和文件處理等基本技術(shù)來區(qū)分權(quán)限,以此來解決投票系統(tǒng)的安全問題。投票者只能進(jìn)行投票,使候選人票數(shù)加一,無法對(duì)候選人票數(shù)進(jìn)行修改。投票人可以根據(jù)候選人信息決定投票,對(duì)候選項(xiàng)人信息有瀏覽和查詢的功能,但不可以修改。對(duì)系統(tǒng)關(guān)鍵信息的修改功能由管理員完成。系統(tǒng)模塊結(jié)構(gòu)圖依據(jù)需求分析結(jié)果,電子投票平臺(tái)可分為6個(gè)模塊:功能選擇、身份驗(yàn)證投票人管理候選人管理、投票區(qū)和得票區(qū)結(jié)果管理。系統(tǒng)模塊結(jié)構(gòu)如下圖所示:功能選擇功能選擇身份驗(yàn)證身份驗(yàn)證投票人管理投票人管理電子投票平臺(tái)平臺(tái)候選人gaun電子投票平臺(tái)平臺(tái)候選人管理候選人管理投票區(qū)管理投票區(qū)管理得票區(qū)管理得票區(qū)管理模塊設(shè)計(jì)功能選擇模塊:該模塊為系統(tǒng)用戶提供功能選擇界面,管理員或投票人登錄系統(tǒng)后都會(huì)看到對(duì)應(yīng)自己權(quán)限的功能選擇界面,輸入自己的功能選項(xiàng)即可跳轉(zhuǎn)到相應(yīng)的功能執(zhí)行函數(shù)。管理員功能選擇界面管理員功能選擇界面投票人功能選擇界面功能選擇投票人功能選擇界面功能選擇身份驗(yàn)證模塊:身份驗(yàn)證模塊的作用是為了保障系統(tǒng)的安全性和系統(tǒng)使用人員角色的區(qū)分。該模塊需要從輸入設(shè)備獲取用戶輸入的用戶名和密碼,判斷是否符合登錄條件,其次要判斷用戶權(quán)限,從而決定其能使用的系統(tǒng)功能。獲取用戶名、密碼獲取用戶名、密碼判斷用戶名密碼是否相符身份驗(yàn)證判斷用戶名密碼是否相符身份驗(yàn)證判斷用戶權(quán)限判斷用戶權(quán)限調(diào)用功能選擇界面調(diào)用功能選擇界面投票人管理模塊:該模塊主要實(shí)現(xiàn)常規(guī)的管理功能,如投票人的初始化,即創(chuàng)建投票人文件、投票人信息增加、刪除、修改和查詢等。因此該模塊主要用結(jié)構(gòu)體類型的數(shù)組和文件的讀寫來完成對(duì)大量數(shù)據(jù)的管理操作。投票人信息初始投票人信息初始投票人管理刪除投票人信息投票人管理刪除投票人信息修改投票人信息修改投票人信息查詢投票人信息查詢投票人信息增加投票人信息增加投票人信息候選人管理模:候選人管理模塊和投票人管理模塊類似,要對(duì)大量有一定結(jié)構(gòu)的信息進(jìn)行管理操作,如增、刪、改和查。因此定義候選人信息結(jié)構(gòu)體,用于存儲(chǔ)候選人信息記錄,并且將大量記錄存儲(chǔ)在硬盤文件中以便保存。用文件的讀寫函數(shù)輔助實(shí)現(xiàn)各項(xiàng)功能。候選人管理初始化候選人管理初始化修改候選人信息修改候選人信息候選人管理候選人管理查詢候選人信息查詢候選人信息瀏覽候選人信息瀏覽候選人信息投票區(qū)模塊:投票區(qū)模塊用于完成系統(tǒng)的主體功能,提示投票人輸入自己想要選舉的候選人序號(hào),系統(tǒng)立刻將該候選人對(duì)應(yīng)的票數(shù)加一,并將目前的投票狀況顯示給投票人。要將候選人對(duì)應(yīng)的票數(shù)增加,需讀取候選人信息文件,將對(duì)應(yīng)的候選人票數(shù)加一后再寫回文件即可。投票人輸入候選人代碼投票人輸入候選人代碼讀取候選人信息文件讀取候選人信息文件投票區(qū)對(duì)應(yīng)候選人票數(shù)加一投票區(qū)對(duì)應(yīng)候選人票數(shù)加一更新票數(shù)后寫回文件更新票數(shù)后寫回文件顯示當(dāng)前投票狀況顯示當(dāng)前投票狀況得票結(jié)果管理模塊:得票結(jié)果管理屬于管理員的權(quán)限范圍,該模塊共有清空投票結(jié)果、得票結(jié)果按票數(shù)多少的排行瀏覽兩大功能。能過得票結(jié)果排行瀏覽可得知哪位候選人選舉成功。當(dāng)選舉結(jié)束后,可選擇清空得票結(jié)果。按票數(shù)排行瀏覽按票數(shù)排行瀏覽得票結(jié)果管理得票結(jié)果管理清空得票結(jié)果清空得票結(jié)果系統(tǒng)的工作流程圖:開始開始身份驗(yàn)證身份驗(yàn)證是是登陸密碼相符?登陸密碼相符?否否重新登陸否否重新登陸是是管理員?管理員?是是管理員功能選擇投票人功能選擇管理員功能選擇投票人功能選擇瀏覽候選人信息查詢候選人信息退出投票候選人管理瀏覽候選人信息查詢候選人信息退出投票候選人管理投票人管理得票結(jié)果管理退出結(jié)束三、詳細(xì)設(shè)計(jì)與源程序代碼:根據(jù)分析與設(shè)計(jì),采用WinTC實(shí)現(xiàn)各模塊功能。以下是系統(tǒng)的詳細(xì)設(shè)計(jì)過程、各源程序代碼清單及說明:功能選擇1、模塊描述功能選擇模塊為系統(tǒng)提供類似于菜單的功能,讓用戶輸入功能選擇項(xiàng),并進(jìn)入相應(yīng)的功能執(zhí)行程序。系統(tǒng)按權(quán)限分為管理員的功能選擇和用戶的選擇。2、源文件定義admin.c管理員主控平臺(tái)guest.c投票者主控平臺(tái)shead.h候選人信息頭文件3、函數(shù)聲明Admin()函數(shù)功能:管理員功能選擇界面。輸入:用戶選擇的功能選項(xiàng)處理:根據(jù)用戶選項(xiàng)跳轉(zhuǎn)到相關(guān)功能函數(shù)輸出:相關(guān)功能函數(shù)的處理或顯界界。程序所在文件:shead.h#include"stdio.h"#include<stdlib.h>#include<conio.h>#include<string.h>typedefstruct{longNumber;/*Fieldofnumber*/charName[20];/*Fieldofname*/charintro[80];/*Fieldofintroduction*/intvotenum;}candidate;externvoidCreatFile();/*創(chuàng)建信息文件*/externvoidAddRecord();/*增加*/externvoidDelRecord();/*刪除*/externvoidModifyByNumber();/*修改*/externvoidQueryBySeatNum();/*按序號(hào)查詢*/externvoidQueryByName();/*按姓名查詢*/externvoidSortByheji();/*按票數(shù)統(tǒng)計(jì)查詢*/程序所在文件:a/*管理員功能選擇界面,根據(jù)用戶選項(xiàng)調(diào)用相應(yīng)函數(shù)實(shí)現(xiàn)系統(tǒng)功能*/#include"shead.h"#include"creat.c"/*creat.c:添加10名候選人,初始化系統(tǒng)工作*/#include"bintro.c"#include"qname.c"/*qname.c,按姓名察看候選人介紹*//*bintro.c:瀏覽候選人介紹,即顯示候選人文件內(nèi)容(沒有投票結(jié)果)*/#include"modnum.c"/*modnum.c,根據(jù)候選人序號(hào)修改候選人介紹*/#include"sort.c"/*sort.c,投票結(jié)果排行*/#include"tovote.c"#include"clearv.c"voidAdmin(){intchoice=0;/*存放用戶選項(xiàng)的變量*/while(1){printf("+--------------------------------------------------------+\n");printf("|WelcometoVoteManagementSystem|\n");printf("|-----------------------+----------------------------------|\n");printf("|1.InitCandidateFile|2.BrowseIntro|\n");printf("|3.ModifyIntro|4.SortByVote|\n");printf("+-----------------------+--------------------------------+\n");printf("|5.clearvote|\n");printf("+-----------------------+---------------------------------+\n");printf("|11.CreatNewUserFile|12.AddUser|\n");printf("|13.DelUser|14.ModifyUser|\n");|0.EndProgram|\n");printf("+-----------------------+--------------------------------+\n");printf("inputyourchoicehere:");scanf("%d",&choice);getchar();/*根據(jù)用戶選項(xiàng)調(diào)用相應(yīng)函數(shù)*/switch(choice){case1:CreatFile();break;case2:BrowseIntro();break;case3:ModifyIntro();break;case4:SortByVote();break;case5:ClearVote();break;case11:CreatUser();break;case12:AddUser();break;case13:DelUser();break;case14:ModifyByUserNumber();break;case15:SortByUserNum();break;case0:exit(0);default:break;}}}Guest()函數(shù)功能:投票人功能選擇。輸入:投票人要使用的功能選項(xiàng)代碼處理:根據(jù)代碼跳轉(zhuǎn)到相應(yīng)功能函數(shù)的處理或執(zhí)行界面。輸出:相應(yīng)功能函數(shù)界面。程序所在文件:voidGuest(){intchoice=0;/*====Choiceisofferedaccordingtofunction.====*/while(1){printf("---------------------------\n");printf("|WelcometoVoteSystem|\n");printf("|-------------------------|\n");printf("|1.BrowseIntro()|\n");printf("|2.Vote()|\n");printf("|3.QueryIntro()|\n");printf("|0.Programend|\n");printf("---------------------------\n");printf("\nPleaseinputyourchoose,(1,2,3,0)?\n");scanf("%d",&choice);getchar();switch(choice){case1:BrowseIntro();break;case2:Vote();break;case3:QueryIntro();break;case0:exit(0);default:break;}}/*return0;*/}身份驗(yàn)證1、模塊描述該模塊判斷要使用該系統(tǒng)的是投票人還是管理員,首先獲取登錄者的用戶名和密碼,其中密碼的獲取用不回顯的方式輸入,避免他人從旁竊取,在一定程度上保證安全性。當(dāng)用戶名和密碼相符時(shí),判斷用戶的權(quán)限并進(jìn)入相應(yīng)功能選擇函數(shù)。當(dāng)用戶忘記密碼時(shí),給用戶機(jī)會(huì)進(jìn)行重新輸入。2、源文件定義3、函數(shù)聲明(1)main函數(shù)功能:用戶登錄系統(tǒng),程序的入口輸入:①用戶名②用戶密碼③是否重新登錄的字符選項(xiàng)處理:①比較用戶名密碼是否相符②不符時(shí),提示用戶是否重新登錄,如用戶不再登錄,退出系統(tǒng)。③相符時(shí),判斷權(quán)限為管理員還是投票者,進(jìn)入相應(yīng)功能選擇界面輸出:①用戶登錄是否成功的提示②是否重新登錄的提示③當(dāng)前用戶的權(quán)限和功能選擇界面程序所在文件:#include"stdio.h"#include<stdlib.h>#include<conio.h>#include<string.h>#defineSIZE100typedefstruct{longNumber;/*用戶序號(hào)*/charName[20];/*用戶名稱*/charps[8];/*用戶密碼*/intpower;/*用戶權(quán)限*/}user;externvoidGuest();/*普通用戶功能選擇界面*/externvoidAdmin();/*管理員功能選擇界面*/externvoidCreatUser();/*創(chuàng)建用戶信息文件*/externvoidAddUser();/*增加用戶記錄*/externvoidDelUser();/*刪除用戶記錄*/externvoidModifyByUserNumber();/*根據(jù)用戶序號(hào)修改*/externvoidSortByUserNum();/*根據(jù)用戶序號(hào)排序?yàn)g覽*//*login.c:用戶登錄,判斷用戶名、密碼、權(quán)限,根據(jù)權(quán)限調(diào)用相應(yīng)功能選擇界面*//*包含用戶信息頭文件包含創(chuàng)建用戶信息、增加、刪除、修改、排序的用戶處理程序包含管理員、投票者的功能選擇界面處理程序*/#include"user.h"#include"admin.c"#include"guest.c"/*對(duì)用戶的創(chuàng)建、增加、刪除、修改、排序*/#include"cuser.c"#include"adduser.c"#include"deluser.c"#include"munum.c"#include"sunum.c"intmain(){FILE*fp=NULL;userShow;userTmpS;/*臨時(shí)存放用戶信息的結(jié)構(gòu)體變量*/charDataFile[40]="yonghu";/*存放用戶信息的文件名為yonghu*/inti;charrelogin;/*是否重新登錄的標(biāo)志*/intsuccess=0;/*登錄成功的標(biāo)志*//*CreatUser();*/printf("#==============================#\n");printf("#WelcometotheVoteSystem!#\n");printf("#==============================#\n");again:/*輸入用戶名*/printf("pleaseentertheusername:");scanf("%s",TmpS.Name);/*輸入密碼,用不帶回顯的方式保證安全性*/printf("password=");for(i=0;i<6;i++){TmpS.ps[i]=getch();}TmpS.ps[6]='\0';/*打開yonghu文件,用來驗(yàn)證用戶名和密碼*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}/*循環(huán)讀取文件校驗(yàn)用戶名和密碼是否正確*/while(fread(&Show,sizeof(user),1,fp)!=(int)NULL){/*如果通過驗(yàn)證,則將success成功登錄標(biāo)記設(shè)為1*/if((strcmp(TmpS.Name,Show.Name)==0)&&(strcmp(TmpS.ps,Show.ps)==0)){printf("\nloginsuccessful!\n");success=1;/*判斷權(quán)限,如power的值為1,則是管理員,并調(diào)用管理員功能選擇界面*/if(Show.power==1){printf("\nyourpowerisadministrator!\n");Admin();}/*判斷權(quán)限,如power的值為0,則是投票者,并調(diào)用投票者功能選擇界面*/if(Show.power==0){printf("\nyourpowerisuser!\n");Guest();}}}/*如未能成功登錄,讓用戶選擇重新登錄或退出*/if(success==0){getchar();printf("\nerrorusernameorpassword!inputagain?(y/n)");scanf("%c",&relogin);if((relogin=='Y')||(relogin=='y')){printf("youchooseinputagain:\n");gotoagain;}else{printf("endprogram");getch();exit(0);}}}投票人管模塊1、模塊描述該模塊對(duì)投票人進(jìn)行管理,只有用系統(tǒng)實(shí)現(xiàn)定義好的投票人用戶名和密碼才能正確登系統(tǒng)進(jìn)行投票,系統(tǒng)亦可賦予用戶管理員的權(quán)限,使用戶能進(jìn)入管理員功能選擇界面執(zhí)行相應(yīng)的功能選項(xiàng)。系統(tǒng)對(duì)投票人的管理有信息初始化、增加、刪除、修改和瀏覽。2、源文件定義cuser.c對(duì)投票人信息初始化。munum.c按序號(hào)查找并修改投票人信息sunum.c瀏覽投票人信息3、函數(shù)聲明CreatUser()函數(shù)功能:初始化投票人或用戶信息,系統(tǒng)首先錄入一些用戶信息,包括用戶名、密碼和權(quán)限,當(dāng)系統(tǒng)投入使用后可以用這些初始的用戶名和密碼登錄。輸入:①初始化用戶信息存儲(chǔ)的文件名②用戶信息的用戶名、密碼、權(quán)限③將用戶信息寫入文件④判斷用戶是否結(jié)束錄入⑤顯示初始化后的文件內(nèi)容輸出:列表顯示初化后的文件內(nèi)容。程序所在文件:/*creat.c:用于初始化候選人信息文件*//*******************************************************************/#include"stdio.h"/*函數(shù)CreatFile*/voidCreatFile(){FILE*fp=NULL;/*定義指向文件的指針*/candidateTmpS;/*定義進(jìn)行操作時(shí)存放結(jié)構(gòu)體變量的*/charDataFile[40]="";/*存儲(chǔ)候選人信息的文件名*/inti;/*計(jì)算可輸入數(shù)據(jù)的最大范圍*//*====輸入存放候選人信息的文件名====*/printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters.suffixcan'texceed3characters,partofexceedwillbediscarded.\n");gets(DataFile);/*如用戶沒有輸入,則循環(huán)提示用戶輸入*/while(*DataFile==('\0')){printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters,suffixcan'texceed3characters.partofexceedwillbediscarded.\n");gets(DataFile);}/*用二進(jìn)制寫的方式打開文件,即創(chuàng)建文件*/fp=fopen(DataFile,"wb+");/*如果當(dāng)前文件不存在,提示打開文件失敗*/if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey.\n",DataFile);perror("Openfilefail");getch();exit(1);}/*如果成功打開或創(chuàng)建文件,則提示輸入候選人序號(hào)、姓名、簡(jiǎn)介等相關(guān)信息*/printf("inputnumber,nameandgradeofenglish,mathandchinese.numberis0meansinputisend.\n");printf("Numberisnotexceed9figures,Nameisnotexceed20characters,rangeofgrade:0.00~1000.00\n");/*循環(huán)從鍵盤上讀取用戶輸入的序號(hào)、姓名、簡(jiǎn)介等相關(guān)信息*/for(i=1;i<=10;i++){/*輸入序號(hào),如為0則停止輸入*/TmpS.Number=i;printf("\ninitthenum%dcandidate\n",i);/*提示輸入候選人姓名*/printf("name=");scanf("%s",TmpS.Name);/*提示輸入候選人介紹*/getchar();printf("intro=");gets(TmpS.intro);TmpS.votenum=0;/*將候選人選票初始化為0*/printf("votenum=%d",TmpS.votenum);printf("\n");/*如遇無法寫入文件的異常,則加以提示*/if(fwrite(&TmpS,sizeof(candidate),1,fp)!=1){printf("\nwritefile%sfail!Endwithanykey\n",DataFile);perror("Writefilefail");getch();exit(1);}}fclose(fp);/*====在屏幕上顯示文件內(nèi)容====*//*clrscr();*/printf("Thedatayouinputisstoresuccessful%sinfile.\n",DataFile);printf("Contentasfollow:\n");fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("\nNumber\tName\tintro\tvotenum\n");while(fread(&TmpS,sizeof(candidate),1,fp)!=(int)NULL){printf("\n%ld\t%s\t%s\t%d\n",TmpS.Number,TmpS.Name,TmpS.intro,TmpS.votenum);}fclose(fp);}AddUser()函數(shù)功能:增加用戶信息輸入:①增加用戶的編號(hào)、用戶名、權(quán)限②是否繼續(xù)的選項(xiàng)輸出:增加新用戶后的文件內(nèi)容程序所在文件:a/*adduser.c增加用戶信息記錄*/#include"stdio.h"voidAddUser(){FILE*fp=NULL;userShow;userTmpS;charDataFile[40]="yonghu";/*存儲(chǔ)用戶信息文件名*/intcount=1;/*計(jì)算可輸入數(shù)據(jù)的最大范圍*/fp=fopen(DataFile,"ab+");/*a+:當(dāng)文件存在時(shí),追加,當(dāng)文件不存在時(shí),創(chuàng)建*//*如果當(dāng)前文件不存在,提示打開文件失敗*/if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey.\n",DataFile);perror("Openfilefail");getch();exit(1);}/*如果成功打開文件,則提示輸入用戶相關(guān)信息*/printf("inputnumber,nameandsalary.numberis0meansinputisend.\n");printf("Numberisnotexceed9figures,Nameisnotexceed20characters,rangeofgrade:0.00~1000.00\n");/*循環(huán)從鍵盤上讀取用戶輸入的用戶相關(guān)信息*/while(count<=SIZE){printf("\ninput'number=0'meansendinput.\n");printf("number=");scanf("%ld",&TmpS.Number);if(TmpS.Number==0)break;printf("name=");scanf("%s",TmpS.Name);getchar();printf("ps=");scanf("%s",TmpS.ps);printf("psis:%s",TmpS.ps);printf("power=");scanf("%d",&TmpS.power);printf("\n");/*如遇無法寫入文件的異常,則加以提示*/if(fwrite(&TmpS,sizeof(user),1,fp)!=1){printf("\nwritefile%sfail!Endwithanykey\n",DataFile);perror("Writefilefail");getch();exit(1);}count++;}/*如果輸入的數(shù)據(jù)量超過最大允許的范圍,則提示數(shù)據(jù)不能錄入*/if(count>SIZE)printf("\nsorry,numberofdatacannotexceed%d\n",SIZE);fclose(fp);/*====在屏幕上顯示增加操作后的文件內(nèi)容====*/printf("Thedatayouinputisstoresuccessful%sinfile.\n",DataFile);printf("Contentasfollow:\n");fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("\nNumber\t\tName\tps\tpower\n");while(fread(&Show,sizeof(user),1,fp)!=(int)NULL){printf("\n%ld\t%s\t%s\t%d\n",Show.Number,Show.Name,Show.ps,Show.power);}fclose(fp);}DelUser()函數(shù)功能:刪除投票人信息輸入:①要?jiǎng)h除的投票人信息所在文件名。②要?jiǎng)h除的投票人信息的編號(hào)③是否繼續(xù)刪除的選項(xiàng)字符處理:①打開投票人信息文件②讀取文件內(nèi)容,獲取要?jiǎng)h節(jié)信息的編號(hào)③將文件信息寫入數(shù)組,根據(jù)編號(hào)刪除數(shù)組中相應(yīng)紀(jì)錄。④將執(zhí)行了刪除操作的數(shù)組結(jié)果寫入文件輸出:①是否繼續(xù)刪除的提示②執(zhí)行了刪除操作之后的文件內(nèi)容程序所在文件:/*deluser.c刪除投票人信息*/#include"stdio.h"voidDelUser(){inti,j,k;longdelnum;userTmpS;users[SIZE];/*SIZE,在user.h頭文件中定義的常量,值為100*/intrecNumber;charDataFile[40]="yonghu",next;FILE*fp;/*====fp指針指向存儲(chǔ)數(shù)據(jù)的文件名====*/begin:fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("pleaseinputtheuser'seatnumwhichyouwilldelete:");scanf("%ld",&delnum);printf("theuseryouwilldeleteis:%ld\n",delnum);recNumber=0;/*讀文件到數(shù)組中,并根據(jù)刪除編號(hào)完成刪除功能*/while((fread(&TmpS,sizeof(user),1,fp))!=(int)NULL){if(TmpS.Number!=delnum){s[recNumber].Number=TmpS.Number;strcpy(s[recNumber].Name,TmpS.Name);strcpy(s[recNumber].ps,TmpS.ps);s[recNumber].power=TmpS.power;recNumber++;}}printf("endshuzuwhile");fclose(fp);/*====將刪除后的結(jié)構(gòu)體記錄寫入文件====*/fp=fopen(DataFile,"wb+");if(fp==NULL){printf("\nSetupfile%sfail!endwithanykey.\n",DataFile);perror("Setupfail");getch();exit(1);}for(i=0;i<recNumber;i++){if(fwrite(&s[i],sizeof(user),1,fp)!=1){printf("\nWritefile%sfail!endwithanykey.\n",DataFile);perror("Writefilefail!");getch();exit(1);}}fclose(fp);/*====顯示刪除后的文件====*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("thefileafterdeleteis:\n");printf("\nNumber\t\tName\tps\tpower\n");while(fread(&TmpS,sizeof(user),1,fp)!=(int)NULL){if(TmpS.Number!=0)printf("\n%ld\t%s\t%s\t%d\n",TmpS.Number,TmpS.Name,TmpS.ps,TmpS.power);}fclose(fp);printf("\nGoon?(y/n)");next=getche();putchar('\n');if(next=='y'||next=='Y')gotobegin;}ModifyByUserNumber()函數(shù)功能:修改用戶名、密碼、權(quán)限信息輸入:①要修改的用戶所在文件名②修改用戶的具體信息③要修改的用戶編號(hào)處理:①打開文件②讀取文件到數(shù)組,修改對(duì)應(yīng)修改編號(hào)的數(shù)組項(xiàng)的具體內(nèi)容③將修改過的數(shù)組保存到文件④顯示修改后的文件輸出:修改后的文件內(nèi)容/*munum.c按用戶序號(hào)修改用戶信息*/#include"stdio.h"voidModifyByUserNumber(){inti,j,k;longmodnum;/*輸入各項(xiàng)修改后信息*/longNumber;charName[20];charps[8];intpower;userTmpS;users[SIZE];/*SIZE,在user.h頭文件中定義的常量,值為100*/intrecNumber;charDataFile[40]="yonghu",next;FILE*fp;/*====fp指針指向存儲(chǔ)數(shù)據(jù)的文件名====*/begin:fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("pleaseinputtheuser'seatnumwhichyouwillmodify:");scanf("%ld",&modnum);printf("theuseryouwilldeleteis:%ld\n",modnum);/*輸入要修改紀(jì)錄的信息*/Number=modnum;printf("name=");scanf("%s",Name);printf("ps=");scanf("%s",ps);printf("power=");scanf("%d",&power);/*將文件中要修改的信息存入結(jié)構(gòu)體數(shù)組*/recNumber=0;while((fread(&TmpS,sizeof(user),1,fp))!=(int)NULL){if(TmpS.Number!=modnum){s[recNumber].Number=TmpS.Number;strcpy(s[recNumber].Name,TmpS.Name);strcpy(s[recNumber].ps,TmpS.ps);s[recNumber].power=TmpS.power;recNumber++;}else{s[recNumber].Number=Number;strcpy(s[recNumber].Name,Name);strcpy(s[recNumber].ps,ps);s[recNumber].power=power;recNumber++;}}printf("\nrecNumber%d\n",recNumber);fclose(fp);/*====將刪除后的結(jié)構(gòu)體記錄寫入文件====*/fp=fopen(DataFile,"wb+");if(fp==NULL){printf("\nSetupfile%sfail!endwithanykey.\n",DataFile);perror("Setupfail");getch();exit(1);}for(i=0;i<recNumber;i++){if(fwrite(&s[i],sizeof(user),1,fp)!=1){printf("\nWritefile%sfail!endwithanykey.\n",DataFile);perror("Writefilefail!");getch();exit(1);}}fclose(fp);/*顯示修改后的文件內(nèi)容*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("thefileaftermodifyis:\n");printf("\nNumber\t\tName\tps\tpower\n");while(fread(&TmpS,sizeof(user),1,fp)!=(int)NULL){if(TmpS.Number!=0)printf("\n%ld\t%s\t%s\t%d\n",TmpS.Number,TmpS.Name,TmpS.ps,TmpS.power);}fclose(fp);/*詢問是否繼續(xù)修改*/printf("\nGoon?(y/n)");next=getche();putchar('\n');if(next=='y'||next=='Y')gotobegin;}SortByUserNum()函數(shù) 功能:排序?yàn)g覽用戶信息輸入:要排序?yàn)g覽的文件名。處理:①打開文件,讀取文件到數(shù)組②對(duì)數(shù)組中的記錄按照用戶編號(hào)進(jìn)行選擇法排序③將選擇排序后的數(shù)組寫入文件④將排序后的文件顯示輸出:排序后的文件內(nèi)容程序所在文件:/*sunum.c按用戶需號(hào)排序?yàn)g覽用戶信息*/#include"stdio.h"voidSortByUserNum(){inti,j,k;userTmpS;users[SIZE];/*SIZE,在shead.h頭文件中定義的常量,值為100*/intrecNumber=0;charDataFile[40]="yonghu";FILE*fp;/*====fp指針指向存儲(chǔ)數(shù)據(jù)的文件名====*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}/*將文件中要排序的信息存入結(jié)構(gòu)體數(shù)組*/while((fread(&TmpS,sizeof(user),1,fp))!=(int)NULL){s[recNumber].Number=TmpS.Number;strcpy(s[recNumber].Name,TmpS.Name);strcpy(s[recNumber].ps,TmpS.ps);s[recNumber].power=TmpS.power;recNumber++;}fclose(fp);/*====如果文件中有記錄,則將各條記錄按序號(hào)排序===*/if(recNumber>1){/*====用選擇排序法進(jìn)行按序號(hào)的排序====*/for(i=0;i<recNumber-1;i++){k=i;for(j=i+1;j<recNumber;j++){if(s[k].Number<s[j].Number)k=j;}TmpS.Number=s[k].Number;strcpy(TmpS.Name,s[k].Name);strcpy(TmpS.ps,s[k].ps);TmpS.power=s[k].power;s[k].Number=s[i].Number;strcpy(s[k].Name,s[i].Name);strcpy(s[k].ps,s[i].ps);s[k].power=s[i].power;s[i].Number=TmpS.Number;strcpy(s[i].Name,TmpS.Name);strcpy(s[i].ps,TmpS.ps);s[i].power=TmpS.power;}/*====將排序好的結(jié)構(gòu)體記錄寫入文件====*/fp=fopen(DataFile,"wb+");if(fp==NULL){printf("\nSetupfile%sfail!endwithanykey.\n",DataFile);perror("Setupfail");getch();exit(1);}for(i=0;i<recNumber;i++){if(fwrite(&s[i],sizeof(user),1,fp)!=1){printf("\nWritefile%sfail!endwithanykey.\n",DataFile);perror("Writefilefail!");getch();exit(1);}}fclose(fp);}/*====顯示排序后的文件====*/printf("Thecontentintheuserfileis:.\n",DataFile);printf("Contentasfollow:\n");fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("\nNumber\tName\tps\tpower\n");while(fread(&TmpS,sizeof(user),1,fp)!=(int)NULL){printf("\n%ld\t%s\t%s\t%d\n",TmpS.Number,TmpS.Name,TmpS.ps,TmpS.power);}fclose(fp);}候選人管理模塊1、模塊描述候選人管理模塊與投票人管理模塊類似,完成候選人信息的初始化、候選人簡(jiǎn)介的修改、候選人簡(jiǎn)介按姓名的查詢和候選人簡(jiǎn)介的瀏覽4個(gè)主要功能。候選人的結(jié)構(gòu)體定義在shead.h頭文件中。2、源文件定義3、函數(shù)聲明voidCreatFile()功能:初始化候選人信息輸入:①打開存放候選人信息的文件②候選人信息的名字和簡(jiǎn)介處理:①創(chuàng)建候選人信息文件②逐條錄入候選人姓名和簡(jiǎn)介信息③將候選人信息寫入文件④錄入10個(gè)候選人后結(jié)束錄入⑤顯示初始化后的文件內(nèi)容輸出:①列表顯示初始化后的文件內(nèi)容程序所在文件:/*******************************************************************//*creat.c:用于初始化候選人信息文件*//*******************************************************************/#include"stdio.h"/*函數(shù)CreatFile*/voidCreatFile(){FILE*fp=NULL;/*定義指向文件的指針*/candidateTmpS;/*定義進(jìn)行操作時(shí)存放結(jié)構(gòu)體變量的*/charDataFile[40]="";/*存儲(chǔ)候選人信息的文件名*/inti;/*計(jì)算可輸入數(shù)據(jù)的最大范圍*//*====輸入存放候選人信息的文件名====*/printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters.suffixcan'texceed3characters,partofexceedwillbediscarded.\n");gets(DataFile);/*如用戶沒有輸入,則循環(huán)提示用戶輸入*/while(*DataFile==('\0')){printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters,suffixcan'texceed3characters.partofexceedwillbediscarded.\n");gets(DataFile);}/*用二進(jìn)制寫的方式打開文件,即創(chuàng)建文件*/fp=fopen(DataFile,"wb+");/*如果當(dāng)前文件不存在,提示打開文件失敗*/if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey.\n",DataFile);perror("Openfilefail");getch();exit(1);}/*如果成功打開或創(chuàng)建文件,則提示輸入候選人序號(hào)、姓名、簡(jiǎn)介等相關(guān)信息*/printf("inputnumber,nameandgradeofenglish,mathandchinese.numberis0meansinputisend.\n");printf("Numberisnotexceed9figures,Nameisnotexceed20characters,rangeofgrade:0.00~1000.00\n");/*循環(huán)從鍵盤上讀取用戶輸入的序號(hào)、姓名、簡(jiǎn)介等相關(guān)信息*/for(i=1;i<=10;i++){/*輸入序號(hào),如為0則停止輸入*/TmpS.Number=i;printf("\ninitthenum%dcandidate\n",i);/*提示輸入候選人姓名*/printf("name=");scanf("%s",TmpS.Name);/*提示輸入候選人介紹*/getchar();printf("intro=");gets(TmpS.intro);TmpS.votenum=0;/*將候選人選票初始化為0*/printf("votenum=%d",TmpS.votenum);printf("\n");/*如遇無法寫入文件的異常,則加以提示*/if(fwrite(&TmpS,sizeof(candidate),1,fp)!=1){printf("\nwritefile%sfail!Endwithanykey\n",DataFile);perror("Writefilefail");getch();exit(1);}}fclose(fp);/*====在屏幕上顯示文件內(nèi)容====*//*clrscr();*/printf("Thedatayouinputisstoresuccessful%sinfile.\n",DataFile);printf("Contentasfollow:\n");fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}printf("\nNumber\tName\tintro\tvotenum\n");while(fread(&TmpS,sizeof(candidate),1,fp)!=(int)NULL){printf("\n%ld\t%s\t%s\t%d\n",TmpS.Number,TmpS.Name,TmpS.intro,TmpS.votenum);}fclose(fp);}ModifyIntro()函數(shù)功能:修改候選人簡(jiǎn)介輸入:①要修改的候選人所在文件名②修改候選人的具體簡(jiǎn)介③要修改的候選人編號(hào)處理:①打開文件②讀取文件到數(shù)組。修改對(duì)應(yīng)的數(shù)組項(xiàng)的具體內(nèi)容。③將修改過后的數(shù)組保存到文件④顯示修改后的文件輸出:修改后的文件內(nèi)容。程序所在文件:/*modnum.c:輸入序號(hào)修改候選人簡(jiǎn)介*/#include"stdio.h"voidModifyIntro(){inti,j,k;longmodnum;/*存儲(chǔ)用戶輸入的要修改的候選人序號(hào)*//*輸入各項(xiàng)修改后信息*/longNumber;charName[20];charintro[80];candidateTmpS;/*定義進(jìn)行操作時(shí)的臨時(shí)結(jié)構(gòu)體變量*/candidates[10];/*10個(gè)候選人*/intrecNumber;charDataFile[40]="",next;/*DataFile存儲(chǔ)候選人信息的文件名,next為是否進(jìn)行下一次刪除操作的選項(xiàng)*/FILE*fp;/*====fp指針指向存儲(chǔ)數(shù)據(jù)的文件名====*//*提示用戶輸入要進(jìn)行修改記錄的文件名*/printf("\npleaseinputthenameoffilewheredataisstored,endwithenterkey.\n");gets(DataFile);/*提示用戶輸入要進(jìn)行修改記錄的文件名*/while(*DataFile==('\0')){printf("\npleaseinputthenameoffilewheredataisstored,endwithenterkey.\n");gets(DataFile);}begin:/*以讀的方式打開文件,如文件不存在,提示錯(cuò)誤*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openf

溫馨提示

  • 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)論