C语言课程设计报告电子投票系统_第1页
C语言课程设计报告电子投票系统_第2页
C语言课程设计报告电子投票系统_第3页
C语言课程设计报告电子投票系统_第4页
C语言课程设计报告电子投票系统_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言课程设计报告电子投票系统学院计算机学院专业年级姓名学号教师年月日广东工业大学计算机学院制一.设计题目电子投票系统二.课程设计目的了解软件工程中的一些系统分析,模块分析,代码设计的概念,利用WIN-TC实现学生成绩管理系统的录入、查询、删除、统计等基本操作,使用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数(系统函数、自定义函数)、文件操作等知识。通过对系统的分析和设计,进一步巩固C语言的学习,以提高对开发环境的进一步认识和综合编程能力。三.系统功能本系统程序功能:(1)投票者功能a.浏览所有候选人资料b.查询要了解的候选人的信息c.在了解候选人之后

2、进行投票(2)管理员功能a.创建新的候选人资料b.创建新的用户资料c.查询要了解的候选人资料d.浏览所有的候选人资料e.对候选人票数进行统计并排序四.系统功能模块结构图本程序利用单链表存储结构完成对学生成绩的动态管理,其基本功能模块如下图所示:电子投票系统链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储候选人,投票人相关信息。且对结点的定义如下:

3、ttypedefstructcandidate/候选人数据结构体longnumber;/候选人编号charname20;/候选人姓名charintro400;/候选人简介intvote;/候选人得票数candidate;typedefstructuser/投票者数据结构体charname20;/投票者姓名charps8;/对应密码intpower;/权限user;2 .main()主函数主函数是程序入口,采用模块化设计。创建用户文档,进行账号密码验证并根据账户不同调用不同函数进入不同的界面,执行不同的功能3 main_a()管理员界面根据输入数字的不同调用不同的函数进入对应的功能,返回主函数。

4、相关的一些函数如下:addcandidate();/创建候选人addUser();/创建投票者search();/查询候选人信息scan();/浏览候选人信息sort();/整理所有投票对菜单选项的选择是输入对应数字按回车键进行选择。4 main_v();投票者者界面根据输入数字的不同调用不同的函数进入对应的功能,返回主函数。相关的一些函数如下:search();/查询候选人信息scan();/浏览候选人信息vote();/投票者投票对菜单选项的选择是输入对应数字按回车键进行选择。5 addcandidate();创建候选人当用户选择该项对应数字后,进入该函数。创建候选人文档,输入候选人信息。

5、用for语句和if语句检查编号、姓名是否重复。在确认不再创建新候选人信息后输出所有候选人信息。6 addUser()创建用户当用户选择该项对应数字后,进入该函数。创建用户文档,输入用户账号与密码。用for语句和if语句检查账号名是否重复。在确认不再创建新用户信息后输出所有用户信息。7 read()读取候选人信息打开候选人文档,提取文档内内容8 scan()浏览候选人信息先调用read()读取候选人信息,利用for语句输出。9 search()查询候选人信息先调用read()读取候选人信息,利用for语句查找与输入编号一致的候选人信息并输出,若查无此编号则输出“对不起,没有您要查询的候选人”。1

6、0 .sort()整理所有投票先调用read()读取候选人信息,利用for语句,使用选择法对投票数进行排序,并输出。11 .vote()投票者投票先调用read()读取候选人信息,输入候选人相应编号,利用for语句,将对应候选人的投票数1,并返回到文档中,输出投票结果。若查无此编号,输出“投票失败!您要投票的号码不存在”。六结果初始界面分别输入1,1进入管理员界面创建新候选人输出候选人信息投票者界面投票以及投票结果候选人票数排序结果七心得体会在本次课程设计中,先使用结构化分析方法对系统进行分析,将整个系统细分为几个模块,再针对每个小模块编写代码。通过本次课程设计的学习以及老师的指导,学会了很多

7、东西,了解了开发一个系统的一些步骤。尽管大部分都参考权威书籍的代码,但是在编写代码过程中还是加深了对链表的了解程度。开发工具用的是vc+6.0o这个程序还存在很多需要改进的地方,如密码输入后直接显示了出来,而不是*,缺少安全性;每个投票人不仅仅只能投一票等等。但我会继续努力学习,争取写出更好的程序源代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#defineclosegrclosegraph#defineN30voidmain_a();管理员界面vo

8、idmain_v();投票者者界面voidaddcandidate();/创建候选人voidaddUser();/创建投票者voidsearch。;/查询候选人信息voidscan();/浏览候选人信息voidvote();投票者投票voidread();读取候选人信息voidsave();存储候选人信息voidsort();/整理所有投票inttotal=0,c_total=0;inti=0;typedefstructcandidate/候选人数据结构体longnumber;/候选人编号charname20;/候选人姓名charintro400;/候选人简介intvote;/候选人得票数ca

9、ndidate;typedefstructuser/投票者数据结构体charname20;/投票者姓名charps8;/对应密码intpower;/权限user;candidatec_manN;usertotal_userN;voidmain_v()/投票者者界面intkey;do”*n");printf(”*欢迎进入投票员界面*n");printf(”*n");printf("*1.浏览所有候选人2.*n");printf("*3.投票*n");scanf("%d",&key);switch(k

10、ey)case1:scan();break;case2:search();break;case3:vote();break;case4:break;default:break;查询候选人信息4.退出while(key!=4);voidvote()/投票者投票longcandidatenum;/定义进行操作时的临时结构体变量inti,flag;charDataFile20="候选人.txt",next;/DataFile存储候选人信息的文件名,next为是否进行下一次投标操作的选项candidateTempS;FILE*fp;begin:flag=0;/flag用来标志是否找

11、对应编号,即投票是否成功read();printf("请输入您要投票的候选人的号码:");scanf("%ld",&candidatenum);printf("您所投票的候选人号码是:%ldn",candidatenum);for(i=0;i<c_total;i+)if(c_mani.number=candidatenum)flag=1;c_mani.vote+;if(flag)printf("投票成功n");fp=fopen(DataFile,"wb");if(fp=NULL)/

12、如果当前文件不存在,提示打开文件失败printf("nOpenfileisfail!Endwithanykey.n",DataFile);perror("Openfilefail");getch();exit(1);for(i=0;i<c_total;i+)fwrite(&c_mani,sizeof(candidate),1,fp);fclose(fp);elseprintf("投票失败!您要投票的号码不存在n");printf(按任意键返回首页!n");getch();return;fp=fopen(Data

13、File,"rb");/显示投票后的情况if(fp=NULL)printf("nOpenfile%sfail!EndWithanykeyn",DataFile);perror("Openfilefail");getch();exit(1);printf("整理后的最新投票情况:n");printf("n候选人号码t候选人姓名t票数n");while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)if(TempS.number!=0)pri

14、ntf("n%ldt%st%dn",TempS.number,TempS.name,TempS.vote);fclose(fp);printf("n继续吗?是(Y)/否(N):");fflush(stdin);next=getchar();putchar('n');if(next='y'|next='Y')gotobegin;voidmain_a()/管理员界面intkey;doprintf(”*n");printf(”*欢迎进入管理员界面*n");printf(”*n");p

15、rintf("* 1. 创建新候选人*n");printf("* 3. 查询候选人信息*n");printf("*2.创建新用户4. 浏览所有候选人5. 整 理 所 有 投 票0. 退 出*n");scanf("%d",&key);switch(key)case1:addcandidate();break;case2:addUser();break;case3:search();break;case4:scan();break;case5:sort();break;case0:break;default:b

16、reak;while(key!=0);voidaddcandidate()/创建候选人charDataFile20="候选人.txt"FILE*fp=NULL;charc;intover_flag=0;candidateTempS;read();fp=fopen(DataFile,"ab+");do*创建新候选人printf(*n");printf("请输入:");printf("候选人号码:");scanf("%ld",&TempS.number);for(i=0;i<

17、c_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;i<c_total;i+)if(strcmp(TempS.name,c_)=0)printf(

18、"该姓名已存在!请再输入一次!按任意键继续.");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("

19、nwritefileisfail!Endwithanykeyn",DataFile);perror("writefilefail");getch();exit(1);printf("要继续创建新的候选人吗?是(丫)/否(N):");fflush(stdin);c=getchar();while(c='Y'|c='y');fclose(fp);printf("候选人资料:n");/在屏幕上显示文件内容printf(”*");fp=fopen(DataFile,"rb"

20、;);if(fp=NULL)printf("nOpenfile%sfail!任意键结束n",DataFile);perror("Openfilefail");getch();exit(1);while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)printf("n号码:%-15ld姓介:%s",TempS.number,TempS.name,TempS.intro);fclose(fp);:%-15s简printf("n*");printf("n

21、按任意键返回首页!");getch();voidread()/读取候选人信息charDataFile20="FILE*fp=NULL;候选人.txt"c_total=0;fp=fopen(DataFile,"rb");if(fp=NULL)printf("nOpenfile%sfail!任意键结束n",DataFile);perror("Openfilefail");getch();exit(1);while(fread(&c_manc_total,sizeof(candidate),1,fp)!

22、=(int)NULL)c_total+;fclose(fp);voidaddUser()/创建用户FILE*fp=NULL;charDataFile20="用户.txt"/存储投票人信息的文件名userTempS;intover_flag=0;charc;fp=fopen(DataFile,"rb");/读入原始数据,用于检查输入是否有重复if(fp=NULL)printf("nOpen file %s fail!任意键结束n",DataFile);perror("Openfilefail");getch();ex

23、it(1);while(fread(&total_usertotal,sizeof(user),1,fp)!=(int)NULL)total+;fclose(fp);fp=fopen(DataFile,"ab+");doprintf("*");printf(" 请输入 :");*创建新用户printf("用户名:");scanf("%s",&TempS.name);TempS.name19='0'for(i=0;i<total;i+)/检查输入姓名是否有重复

24、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)Tem

25、pS.power=0;total_usertotal=TempS;/将数据加入原始数据total+;if(fwrite(&TempS,sizeof(user),1,fp)!=1)printf("nwritefileisfail!任意键结束n",DataFile);perror("writefilefail");getch();exit(1);printf("要继续创建新用户吗?是(丫)/否(N):");getchar();c=getchar();while(c='Y'|c='y');fclose

26、(fp);printf("用户资料数据处理完毕.n",DataFile);/在屏幕上显示文件内容printf("所有用户具体情况如下:n");fp=fopen(DataFile,"rb");printf("*");if(fp=NULL)printf("nOpenfileisfail!EndWithanykeyn",DataFile);perror("Openfilefail");getch();exit(1);printf("n姓名tt密码tt权限n");

27、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();voidscan()/浏览候选人信息read();printf("候选人资料:n");printf(”*n");for(i=0;i<c_total;i+)printf("号码:%-15ld&qu

28、ot;,c_mani.number);printf("姓名:%-19s",c_);printf("简介:%sn",c_ro);printf(”*);printf("n按任意键返回首页!");getch();voidsearch()/查询候选人信息charc;longnumber;intflag=0;read();doprintf("nt请输入要查询的候选人号码:");scanf("%ld",&number);for(i=0;i<c_total;i+

29、)if(number=c_mani.number)printf("t您要查询的候选人信息如下:nn");printf("t号码:%ldn",c_mani.number);printf("t姓名:%sn",c_);printf("t简介:%sn",c_ro);flag=1;break;if(flag)flag=0;elseprintf("t对不起,没有您要查询的候选人n");printf("t要继续查询候选人吗?是(Y)/否(N):");get

30、char();c=getchar();while(c='Y')|(c='y');voidsort()/整理所有投票inti,k,j;candidatec_man2N/*存放排序后的数据*/,temp;read();for(i=0;i<c_total;i+)c_man2i=c_mani;for(i=0;i<c_total-1;i+)/用选择法排序k=i;for(j=i+1;j<c_total;j+)if(c_man2k.vote<c_man2j.vote)k=j;if(k!=i)temp=c_man2i;c_man2i=c_man2k;c_

31、man2k=temp;/排序结束printf("票数从高到低排列如下:n");printf("*n");printf("*号码候选人票数 *n");printf("*n");for(i=0;i<c_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"char relogin;/ 是否重新登录的标志int success=0;user input_user,temp_user;printf(" 管理员账号密码都为 1n");printf(

温馨提示

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

最新文档

评论

0/150

提交评论