电子投票系统

上传人:d**** 文档编号:209437904 上传时间:2023-05-13 格式:DOCX 页数:33 大小:93.18KB
收藏 版权申诉 举报 下载
电子投票系统_第1页
第1页 / 共33页
电子投票系统_第2页
第2页 / 共33页
电子投票系统_第3页
第3页 / 共33页
资源描述:

《电子投票系统》由会员分享,可在线阅读,更多相关《电子投票系统(33页珍藏版)》请在装配图网上搜索。

1、电子投票系统院(系):信息工程系专业:计算机科学与技术班级:5173002142团队成员:1)姓名:来紫祥 学号:5173002142142)姓名:王泽峰 学号:5173002142293)姓名:石凤丽 学号:5173002142254)姓名:陈 阳 学号:5173002142045)姓名:贺天浩 学号:5173002142096)姓名:胡 成 学号:5173002142107)姓名:胡伊童 学号:517300214211指导老师:杜君所在单位:湖北工程学院新技术学院 课程设计时间:2019年 5月 1日至 5月 18 日1. 需求分析1.1问题描述投票是选举的一种表现形式,但是较电子投票来说

2、,纸质投票方式相对复杂。电子投票 系统以文件的方式保存候选人信息和用户信息,并提供投票和查询功能供用户查询和使用投 票系统。下面介绍用C语言实现的简易电子投票系统,它支持基本的用户的投票、查找、浏 览功能,管理员的删除、查找、排序、新建候选人和用户功能,以及系统自带的文件读写功 能。1.2 功能描述电子投票系统要求实现最基本的功能,用户的投票、查找、浏览功能以及管理员的删除、 查找、排序、新建候选人和用户功能,为此需要首先定义两个数据结构。其一是候选人,基 本属性包括编号、姓名、简介和票数;其二是用户,基本属性包括账号、密码和权限。 整个系统由如下几大功能模块组成。投票人主要功能如下:(1)投

3、票人的投票方式:在系统提示符下输入要选举的选人编号,即可完成投票。(2)投票人了解候选人的方式:浏览候选人列表、输入序号查询候选人介绍。 管理员的主要功能如下;(1)初始候选人信息:在系统投入使用前需要将投票选举的候选人信息录入系统中,以 便投票和查看。管理员的初始化工作就是将候选人的序号、姓名和简介录入系统。(2)浏览候选人简介:为随时掌握候选人的信息,以便进行修改,管理员有权浏览候选 人简介。浏览的顺序按照候选人序号即可。(3)修改候选人简介:当系统更新或候选人信息有所变化时,输入候选人序号对其信息 进行修改。(4)查询投票情况:管理员有权查询当前各个候选人得票情况,以便得出最终被选出的

4、候选人信息。(5)清除投票信息:当投票工程结束后,管理员选择清除投票信息即清除系统中所有候 选人的票数,使之归零。(6)安全管理:管理员可以对投票人进行管理,投票人只有用管理员规定的用户名和密 码才能进入系统进行投票。管理员还可以更改用户名、密码和权限,并对投票人信 息进行增加、删除、查询、排序和初始化等操作。2. 总体设计程序主要包括三大模块:输入/输出模块、管理模块和文件操作模块。输入/输出模块的 主要功能是人机交互,包括程序界面显示、用户输入响应、结果输出等;管理模块从输入/ 输出模块读取用户命令并进行相应的操作,包括录入、删除、修改、查找、排序等;文件操 作模块获取管理模块中的数据或命

5、令,然后进行存储文件的读写,如图 0-1所示。幵怡少钳验证普遹用户初始址(加载 数据I取迎卉面图 0-1电子投票系统流程图3. 界面设计程序的主界面是一个文本方式的菜单,用户通过键盘输入数字,选取相应的操作命令4. 详细设计4.1重要数据结构设计电子投票系统中候选人信息用结构体Candidate表示,包含四个属性。number属性是 候选人的唯一编号,name、intro、vote分别代表候选人的姓名、简介、票数。struct Candidate *next表示单链表的指针域。typedef struct candidatelong number;char name20;char intro4

6、00;int vote;struct candidate *next; candidate;电子投票系统中用户信息用结构体user表示,包含三个属性account、password、power分别代表用户的账号、密码和权限。struct user *next表示单链表的指针域。typedef struct userchar account20;char password17;int power; struct user *next; user;4.2功能函数设计电子投票系统采用了结构化设计的思想,程序中除了主函数外,共设计了28个函数。(1)void WelcomePage()功能:显示欢迎界

7、面。(2)void End_Page();功能:显示结束界面。(3)void AdminPage();功能:显示管理员界面。(4)void VoterPage();功能:显示用户(投票者)界面。(5)void CreateCandidate();功能:创建候选人。(6)void CreatUser();功能:创建用户。(7)void QueryCandidateInfo();功能:查询候选人信息。(8)void BrowseCandidateInfo();功能:浏览全部候选人信息。(9)void DisplayCandidateInfo(candidate *p);功能:展示单个候选人信息。1

8、0) void DisplayUserInfo(user *p); 功能:展示单个用户信息。11) void BrowseUserInfo(); 功能:浏览全部用户信息。12) void Vote(); 功能:用户投票。13) void ReadCandidateInfo(); 功能:读取候选人信息。14) void SaveCandidateInfo(); 功能:存储候选人信息。15) void SaveUserInfo(); 功能:存储用户信息。16) int peek(FILE *fp); 功能:预读取文件的下一个字节(用来判断文件是否到达结尾。17) void Initializati

9、on(); 功能:初始化,加载候选人数据,加载用户数据。18) void ShowVotingSituation(); 功能:显示投票情况19) void ReadUserInfo(); 功能:从文件读取用户信息20) void CandidateSort(); 功能:按票数从高到低列出所有数据21) void UserLogin();功能:用户登陆22) void ModifyCandidateInfo();功能:修改投票人信息23) user * SearchUser(char *account);功能:根据账号搜索用户信息并返回指向该用户的指针,没该用户信息则返回空(24)candida

10、te *SearchCandidate(long number); 功能:根据候选人编号搜索候选人信息信息并返回指向该用户的指针,没该候选人 信息则返回空(25)void ClearVoteInfo();功能:清除投票信息(26)void ModifyUserInfo(); 功能:修改用户信息(27)void DeleteCandidateInfo(); 功能:删除候选人信息(28)void DeleteUserInfo();功能:删除用户信息5. 编码实现(1)程序预处理包括加载头文件,定义结构体、常量和变量,并对它们进行初始化。(2)登录界面用户进入电子投票系统时,显示登录界面,提示用户进

11、行登录,完成相应操作。(3)记录查找定位查找函数(用户)user * SearchUser(char * account)参数:char * account以账户来搜索具体内容。作用:搜索用户信息并返回指向该用户的指针,没该用户信息则返回空。查找函数(候选人)candidate * SearchCandidate(long number)参数:long number以候选人编号来搜索具体内容。作用:搜索候选人信息信息并返回指向该用户的指针,没该候选人信息则返回空。(4)增加记录创建函数(候选人)void CreateCandidate() 作用:创建候选人信息并添加到链表中。创建函数(用户)v

12、oid CreatUser()作用:创建用户信息并添加到链表中。5) 查询记录查询函数:void QueryCandidatelnfo() 作用:通过编号查询候选人信息并显示。6) 删除记录删除函数(用户)void DeleteUserlnfoO 作用:通过用户账号删除用户信息。删除函数(候选人)void DeleteCandidatelnfo() 作用:通过候选人编号删除候选人信息。7) 修改记录修改函数(用户)void ModifyUserlnfoO 作用:通过用户账号修改用户信息。修改函数(候选人)void ModifyCandida telnfo() 作用:通过候选人编号修改候选人信息

13、。8) 排序记录排序函数:void CandidateSort() 作用:通过票数高低进行排序。9) 存储记录存储函数(用户)void SaveUserlnfoO 作用:将用户链表中的信息保存到文件中。存储函数(候选人)void SaveCandidatelnfo()作用:将候选人链表中的信息保存到文件中。10) 读取记录读取函数(用户)void ReadUserlnfoO作用:从UserlnfoFile.dat文件中读取候选人信息。读取函数(候选人)0void ReadCandidatelnfo()作用:从Candidatelnfo.dat文件中读取候选人信息。6. 运行测试测试是程序设计中

14、至关重要的一步,测试不是简单地等同于调试。调试的任务是消除程 序代码中的错误(bug),使其能顺利运行;测试则更强调软件功能上的正确实现以及是否满 足用户需求等。编码完成之后就要进行测试,测试之前首先要制定测试方案,其中包括待测 试功能、测试数据以及预期的结果。本次设计测试方案的用例如下:登录界面宜京除尙总家字字容常*京卓命窗家家富験欢登|击电 f 投::!系统伙京直命黑家*:家富倉京除尙富总黑家字富 请输入用户名:admin请输入密码:和欢迎界面*学学*学字字字字字*学学*学学字字字字字*半*半*半*管理员界即*字罕卒字算*當*罕字字罕鼻*1. 创建新候选人2. 创建新用户乂査询候选人信息4

15、”浏览所有假选人5. 擊理所有投票6. 修改候连人彳言息7. 删除候选人信息3. 杳询用户信息玄修攻用户信息10.删除用户信息11清空投票信息D.退出京请选样0到5:.退出界面感谢您的参与!卩视!管理员功能测试:(1) 创建新候选人*感*水尙裟*水井*仓|_|帖新f庚选人*唏*氷尙裟*水*寒*水 请输入:候选人号码:L001姓帛:泽峰简介:学生要继续创建新的候选人吗?是(Y)/否(N): Y_(2) 创建新用户鄆爭牢*字爭帘*:|!牢*耶 *:|!电建新 JIJ . * * *请输入:用户 3086408355密 123456789提小权限只冇1和山如果权限输入不在1和0之仙那么就默认趴提示1

16、为管理员权限 投嗦人权限F.(3) 査询候选人信息您要査询的候选人信息如下:号码:1001姓名:|薛峰简介:学要继续査询候选人吗?是(Y)/否(N):(4) 查询所有候选人?:叮?YIJ-L-卅牛牛工弟*-!-.生 務学学学学学学学 :: 榊介介介介介介介 钳筒简简简简简简 巳叮?:MT 浩童祥丽 榊泽FII成尺*紫风 紳匕陈刖贺相未石 : 和名弟名名名名名 紳姓姓姓姓处姓蛀 ?弓):巳*:*1234567 當 o o o o o o O OOOOOOO 11 11 11 11 11 11 11 琢 :-: 林码玛码码仍侣科 粋号号号号号号号人澀如r 选仃一陈贺胡相4 3 2 111* * *

17、 *# 忘奪*# 生 *# 生审* *# 古 *总* * 生*# 古生* * 生* * 古总总*# 按任意铠胚回首頁!(5) 整理所有投票宾数从高到低排列如下: *号码*1007*1001*1002*1004*1005*1003* + 按作意握返回首虫!(6)修改候选人信息请输入候选人的编号:1001 请选择耍修改的内容1.修衣候逸人姓名2修改候选人简介D_退出*请选择0到2:2请输入新的简介:学委是重新输入编号?是(丫)/否何):N(7)删除候选人信息请输入候选人编号:1006 请确认是否删除!是(Y)/否(N):Y帐的号码限2码 的改帐密权:密 户修户户户.網的 用要用川用仔新 入择改改改

18、料入 输选修修修选输 请请L2.3.请请号:3086408355:1472583698) 查询用户信息姓名密码权限adfeinadmin1laizisiatiglai158720497233086408355 按任意極返回!.1234567899) 修改用户信息10)请輸入用户账号:3086408355 请确认是否删除!是(Y)/否(N):Y 删除成功!是否重新输入用户账号【是(11)清空投票信息投票信息淸除完成!按任意键返回!候选人功能测试:(1) 浏览所有候选人候选人资料:峰 浩席祥丽 涤阳成天4紫风 匚陈屈贺崗未石 姓红姓姓鉅姓姓生牛生生牛生生 学学学学学学学 - a - B B - 介

19、介於介介於介 简简简伺简简简号码:1001号码:1002号码:1003寻码:1OM号码:1005号码:10064:1007* 生* 击 * * 实* *# 击占* 木生*才* * 古总*才 *# * 生占*# 木喀* * 按任意键遞回首贞!(2) 査询候选人信息您要査询的候选人伫息如下:号码:1007姓名:仃凤IB简介:学d要堆续查询候选人吗?是(Y/否(N): N(3) 投票请输入您要投票的悝选人的号码:10听您所投柴的候选人廿码:1007投噥成功 最新投票情况:候逸人号码候选人妙名票数10D11湃峰31002陈阳=!1003胡诫11004贺天浩11005胡悦童11007石凤丽4继续吗?足(

20、丫)丿fed): _7. 小结该程序基本达到了数据结构课程设计的要求,但程序还是存在一定的不足之处。其 一是未设置用户密码检测机制,对密码的长度没有限制且不能检测密码复杂度,因此系统安 全性不高,可能会出现不确定性的错误;其二是修改函数没有检查机制,可能会导致信息重 复。在编写过程中,由于用到链表操作,所以遇到很多指针指向错误的问题,经常导致程 序直接崩溃。在运行过程中,发现出现回车键被读取的情况,从而导致无法正常输入,解决方法是 在数据输入前加入getchar(函数。同时还发现清空缓冲区函数未发挥作用,因为C语言的标 准里从来没有定义过fflush(s tdin)某些编译器如VC6支持用ff

21、lush(s tdi来清空输入缓冲但是并非所有编译器都要支持这个功能,女Hlinux下的gcc就不支持。在文件读取过程中,发现使用int feof(FILE *strea函数无法按正确判断文件是否 读取到结尾。因为feof判断文件结束是通过读取函数fread/fscan等返回错误来识另啲,故 而判断文件是否结束应该是在读取函数之后进行判断。比如,在while盾环读取一个文件时, 如果是在读取函数之前进行半蜥,贝9如果文件最后一行是空白行,可能会造成内存错误,c 语言没有像c+W羊文件预读函数peek另外需要注意的是,用指针作为函数返回值时需要注意的一点是,函数运行结束后会 销毁在它内部定义的所

22、有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针 请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使 用过程中可能会引发运行时错误(局部变量可能是在栈上创建出来的,函数结束后局部变量 可能会被销毁)。通过这次C语言的课程设计,让我们从更深一层了解了 C语言作用的强大以及C语 言的魅力。我们一定要好好掌握C语言方方面面的知识,学会编程才能仓创造出更美好的东西, 另外,做这个课程设计的时候我是参考了很多资料才完成的,所以在编写程序这方面,我们 的功力还远远不够,需要努力努力,继续加强!附录(程序源代码)Main.c#includeevotingsystem

23、.hint main()Initialization();WelcomePage();UserLogin();SaveUserInfo();SaveCandidateInfo();End_Page();return 0;evotingsystem.h#pragma once#include#include#include#include#define NULL 0/数据定义/*候选人信息数据结构 描述候选人的编号、姓名、简介和得票数量信息,作为候选人信息记录存在文件中*/ typedef struct candidatelong number;char name20;char intro400

24、;int vote;struct candidate *next; candidate;/*系统用户数据结构 描述系统用户编号、用户名、密码和权限信息,作为一整条记录存放在文件中*/ typedef struct userchar account20;char password17;int power;struct user *next; user;/功能定义/* 欢迎界面 */void WelcomePage();/* 再见 */void End_Page();/* 管理员界面 */void AdminPage();/* 用户(投票者)界面 */void VoterPage();/* 创建候

25、选人 */void CreateCandidate();/* 创建用户 */void CreatUser();/* 查询候选人信息 */void QueryCandidateInfo();/* 浏览全部候选人信息 */void BrowseCandidateInfo();/* 展示单个候选人信息 */void DisplayCandidateInfo(candidate *p);/* 展示单个用户信息 */void DisplayUserInfo(user *p);/* 浏览全部用户信息 */void BrowseUserInfo();/* 用户投票 */void Vote();/* 读取候选

26、人信息 */void ReadCandidateInfo();/* 存储候选人信息 */void SaveCandidateInfo();/* 存储候选人信息 */void SaveUserInfo();/* 预读取文件的下一个字节(用来判断文件是否到达结尾) */ int peek(FILE *fp);/* 初始化 加载候选人数据 加载用户数据*/void Initialization();/显示投票情况void ShowVotingSituation(); /*从文件读取用户信息*/void ReadUserInfo();/*按票数从高到低列出所有数据*/void CandidateSor

27、t();/*用户登陆*/void UserLogin();/* 修改投票人信息 */void ModifyCandidateInfo();/* 根据账号搜索用户信息并返回指向该用户的指针,没该用户信息则返回空 */ user * SearchUser(char *account);/* 根据候选人编号搜索候选人信息信息并返回指向该用户的指针,没该候选人信息则返回 空 */candidate *SearchCandidate(long number);/* 清除投票信息 */void ClearVoteInfo();/* 修改用户信息 */void ModifyUserInfo();/* 删除候

28、选人信息 */void DeleteCandidateInfo();/* 删除用户信息 */void DeleteUserInfo();evotingsystem.c#includeevotingsystem.h/* 存储投票人信息的文件名 */char CandidateInfoFileName = CandidateInfo.dat;/* 用户信息的文件名 */char UserInfoFileName = UserInfoFile.dat;int UserNum = 0;int CandidateNum = 0;/候选人头指针candidate *candidatelisthead =

29、NULL;/候选尾指针candidate *candidatelistend = NULL;/排序后的候选人头指针candidate *candidatelisthead2 = NULL;/用户头指针user * userlisthead = NULL;/用户尾指针user * userlistend = NULL;void ReadCandidateInfo()FILE * fp = NULL; candidate *p = NULL; candidate *s = NULL;CandidateNum = 0;candidatelisthead = (candidate *)malloc(s

30、izeof(candidate); candidatelisthead-next = NULL;candidatelistend = candidatelisthead;p = candidatelisthead;fp = fopen(CandidateInfoFileName, rb);if (fp = NULL)printf(nOpen file %s fail! End With any key n, CandidateInfoFileName); perror(Open file fail);getch();exit(1);elsewhile (peek(fp) != NULL)s =

31、 (candidate *)malloc(sizeof(candidate);int a = fread(s, sizeof(candidate), 1, fp); s-next = NULL;p-next = s;p = s;candidatelistend = p; CandidateNum+; fclose(fp);void ReadUserInfo()FILE * fp = NULL;user *p = NULL;user *s = NULL;UserNum = 0;userlisthead = (user *)malloc(sizeof(user); strcpy(userlisth

32、ead-account, superadmin); strcpy(userlisthead-password, superadmin);userlisthead-power = 1;userlistend = userlisthead;p = userlisthead;p-next = NULL;fp = fopen(UserInfoFileName, rb);if (fp = NULL)printf(nOpen file %s fail! End With any key n, UserInfoFileName); perror(Open file fail);getch();exit(1)

33、;elsewhile (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);/* 存储候选人信息 */void SaveCandidateInfo()FILE *fp = NULL;candidate *p = NULL;fp = fopen(CandidateInfoFileName, wb);if (fp = NULL)perror(write

34、file fail); getch();exit(1);elsefor (p = candidatelisthead-next; p != NULL; p = p-next)fwrite(p, sizeof(candidate), 1, fp); fclose(fp);/* 存储用户信息 */void SaveUserInfo()FILE *fp = NULL;user *p = NULL;fp = fopen(UserInfoFileName, wb);if (fp = NULL)perror(write file fail); getch();exit(1);else= p-next)fo

35、r (p = userlisthead-next; p != NULL; p fwrite(p, sizeof(user), 1, fp); fclose(fp);int peek(FILE * fp)char a;int flag = NULL; /读取文件流中的下一个字节 if (fread(&a, sizeof(char), 1, fp) != NULL) /将文件指针向后移动一个字节 fseek(fp, -1, SEEK_CUR);flag = 1;return flag;/* 初始化 加载候选人数据 加载用户数据*/void Initialization()ReadCandidate

36、Info(); ReadUserInfo();printf (程序初始化成功! n);void Vote()/* 临时候选人编号 */ long candidatenum;/*flag用来标志是否找对应编号,即投票是否成功*/int flag = 0; /待添加功能/* 检测用户投票次数防止多次重复投票 */int votetimes = 0;/* 用来检测是否进行下一次投票 */char isnext = N; candidate *p = NULL; candidate *temp = NULL;doprin tf(请输入您要投票的候选人的号码:); scanf(%ld, &candida

37、tenum);prin tf(您所投票的候选人号码是:ldn, Candida tenum); if (temp = SearchCandidate(candidatenum) != NULL)temp-vote+;prin tf(投票成功n);/* 显示投票后的情况 */ ShowVotingSituation();elseisnext = N;prin tf(投票失败!您要投票的号码不存在n); prin tf(按任意键返回上一步!n);getch();getch();printf(n 继续吗?是(Y)/否(N):); getch();isnext = getchar(); while (

38、isnext = y | isnext = Y);void ShowVotingSituation()candidate *p = NULL;prin tf(最新投票情况:n);printf(n候选人号码t候选人姓名t票数n);for (p = candidatelisthead-next; p != NULL; p = p-next) printf(n%ld t%s t%dn, p-number, p-name, p-vote);/*创建用户信息*/void CreatUser()user *s = NULL;user *p = NULL;int flag = 0;char c;s = (u

39、ser *)malloc(sizeof(user); s-next = NULL;/*读入原始数据,用于检查输入是否有重复*/ system(cls);do system(cls); printf( *创建 新 用户* ); prin tf(n 请输入:); printf (n 用户名:);scanf(%s, s-account); s-account19 = 0; /*检查输入姓名是否有重复*/SearchUser函数用来搜索if (SearchUser(s-account) != NULL)prin tf(该用户名已存在!); getch();flag = 1;elseprin tf(密码

40、:); scanf(%s, &s-password);s-password16 = 0;pr int f (提示权限只有1和0,如果权限输入不在1和0之间那么就默认0提示1为管理员权限,0为投票人。n);prin tf(权限:); scanf(%d, &(s-power); if (s-power != 1)s-power = 0;/*将数据加入原始数据,用于下一次输入比较*/userlistend-next = s; userlistend = s; UserNum+;prin tf(要继续创建新用户吗?是(Y)/否(N):); getchar();c = getchar(); while

41、(c = Y | c = y); /* 在屏幕上显示文件内容 */prin tf(用户资料数据处理完毕.n);prin tf(所有用户具体情况如下:n);r 八 r -4- -P ( 、I 1 r Illi I IJBrowseUserInfo();printf(n按任意键返回首页!); getch();/* 创建候选人 */void CreateCandidate()candidate *p = NULL;candidate *s = NULL;char c = N;long number; system(cls);do system(cls);p r i n t f ( *创建新候选人*

42、n ) ; prin tf(请输入:n);prin tf(候选人号码:);scanf(%ld, &number);/*检查输入编号是否有重复*/if (SearchCandidate(number) printf(该号码已存在,按任意键结束! n); getch();break;elses = (candidate *)malloc(sizeof(candidate); s-next = NULL;s-number = number;printf(姓名:);scanf(%s, s-name); s-name19 = 0;prin tf(简介:);getchar();/scanf正则表达式用法

43、scanf(%n, s- intro);s-intro399 = 0; s-vote = 0;/*将数据加入原始数据,用于下一次输入比较*/candidatelistend-next = s; candidatelistend = s;CandidateNum+;prin tf(要继续创建新的候选人吗?是(Y)/否(N): ); getchar();c = getchar(); while (c = Y | c = y);/* 在屏幕上显示文件内容 */BrowseCandidateInfo();/* 浏览全部候选人信息 */void BrowseCandidateInfo()candidat

44、e *p = NULL;/* 清屏 */system(cls);printf(候选人资料:n);r 八 r -4- -P ( -p 、I 1 r Illi I I I I J,for (p = candidatelisthead-next; p != NULL; p = p-next)DisplayCandidateInfo(p);-*rt r 八 r -p -4- -P ( 、I 1 r Illi I IJprintf(n按任意键返回首页!); getch();/* 展示单个候选人信息 */void DisplayCandidateInfo(candidate * p)pri ntf(号码:

45、T5ld, p-number);printf (姓名:T9s, p-name);pri ntf(简介:%sn, p- intro);/* 展示单个用户信息 */void DisplayUserInfo(user * p) printf(n%stt%-8stt%dn, p-account, p-password, p-power);/* 浏览用户信息 */void BrowseUserInfo()system(cls);user *p;printf(n 姓名 tt 密码 tt 权限 n);for (p = userlisthead-next; p != NULL; p = p-next)Disp

46、layUserInfo(p);printf (按任意键返回!);getchar();getchar();/* 查询候选人信息 */void QueryCandidateInfo()char c = N;long number;candidate *p = NULL;dop = NULL;system(cls);printf(nt请输入要查询的候选人号码:);scanf(%ld, &number);if (p = SearchCandidate(number)!= NULL)system(cls);printf(t您要查询的候选人信息如下:nn);DisplayCandidateInfo(p);

47、elseprintf(t对不起,没有您要查询的候选人n);printf(t要继续查询候选人吗?是(Y)/否(N): ); getchar();c = getchar(); while (c = Y) | (c = y);void CandidateSort()system(cls);candidate *p, *s;candidate *i;char temp400;long temp_num;/*candidatelisthead2用于存放排序后的数据*/ candidatelisthead2 = (candidate *)malloc(sizeof(candidate); p = cand

48、idatelisthead2;/* 将候选人链表复制一份*/for (i = candidatelisthead-next; i != NULL; i = i-next)s = (candidate*)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;

49、 p = p-next)for (s = p-next; s != NULL; s = s-next)if (s-vote p-vote)strcpy(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 = temp_num; temp_num = s-vote; s-vote =

50、p-vote; p-vote = temp_num; /*排序结束*/prin tf(票数从高到低排列如下:n); printf(* *n);printf(*号码候选人票数 *n);printf(* *n);/*输出排序后的结果*/for (p = candidatelisthead2-next; p != NULL; p = p-next)printf(*%-13ld %-13s%-6d*n, p-number, p-name, p-vote);printf(* *n);printf(按任意键返回首页!); getch();void WelcomePage()printf (* 电子投票系统

51、*n); prin tf(按任意键进入系统登录界面.);getch();system(cls);pri ntf (*欢迎登陆电子投票系统*n);void End_Page()system(cls);prin tf(nnnnnnr 感谢您的参与!n); printf(nnnnnnr 再见!);getch(); /*管理员界面*/ void AdminPage()int key;do system(cls);/*输出主菜单*/ printf(*n);prin tf(管理员界面nr);printf(*n);printf(l.创建新候选人n);printf (2.创建新用户n);printf(3.查询

52、候选人信息n); printf(4.浏览所有候选人n); printf(5.整理所有投票n);prin tf (6 .修改候选人信息n); printf(7.删除候选人信息n); printf(8.查询用户信息n);prin tf (9 修改用户信息n); printf (10.删除用户信息n);printf (11.清空投票信息n); printf(0.退出n);printf (*请选择 0 到 11:); scanf(%d, &key);switch (key)case 1:CreateCandidate(); break;case 2:CreatUser();break;case 3:Q

53、ueryCandidateInfo(); break;case 4: BrowseCandidateInfo(); break;case 5:CandidateSort(); break;case 6:ModifyCandidateInfo(); break;case 7:DeleteCandidateInfo(); break;case 8:BrowseUserInfo(); break;case 9:ModifyUserInfo(); break;case 10:DeleteUserInfo(); break;case 11:ClearVoteInfo(); break;case 0:br

54、eak;default:break; while (key != 0);End_Page();/*投票者界面*/void VoterPage()int key;dosystem(cls);/*输出主菜单*/ printf(*nr);prin tf(投票者界面nr);printf(*nr);printf (1.浏览所有候选人nr);printf (2.查询候选人信息nr);printf(3.投票nr);printf(O.退出nr);printf(*请选择 0 到 3:);scanf(%d, &key);switch (key)case 1:BrowseCandidateInfo();break;

55、case 2:QueryCandidateInfo();break;case 3:system(cls);Vote();break;case 0:break;default:break; while (key != 0);End_Page();void UserLogin()char account20;char password17;int i=0;char t;user *temp_user;/判断登陆是否成功int login_success = 0;int login_times = 0;/用来输出错信息char error_message25 = 0;/判断用户是否重新登陆char

56、relogin = N;doprintf(请输入用户名:);scanf(%s, account);/搜索用户名temp_user = SearchUser(account);getchar();if (temp_user != NULL)doprin tf (n请输入密码:);/读取密码时用星号显示 while (1)t = getch();if (t != r&t!= b) printf(*);passwordi = t; i+;else if(t=b&i!=0)printf(b b); i-;else if(t=r)passwordi = 0; break;/scanf(%s, password);if (strcmp(temp_user-password, password) =

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!