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

下载本文档

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

文档简介

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

2、解候选人之后进行投票(2)管理员功能a. 创建新的候选人资料b. 创建新的用户资料c. 查询要了解的候选人资料d. 浏览所有的候选人资料e. 对候选人票数进行统计并排序其基本功能模块如下图所示:四系统功能模块结构图本程序利用单链表存储结构完成对学生成绩的动态管理,电子投票系统验证账号密码理查 员找图候览看程序功能模块结构候投五程序设计及各模块函数功能简述1数据结构链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储 结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一 元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。链表的最大

3、 的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储候选人 投票人相关信息。且对结点的定义如下:ttypedef struct candidate/ 候选人数据结构体long number;/候选人编号char name20;/ 候选人姓名char intro400;/ 候选人简介int vote;/候选人得票数candidate;typedef struct user/ 投票者数据结构体char name20;/ 投票者姓名char ps8;/ 对应密码int power;/ 权限user;2.main() 主函数 主函数是程序入口,采用模块化设计。创建用户文档,进行账号

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

5、; / 投票者投票对菜单选项的选择是输入对应数字按回车键进行选择。5addcandidate();创建候选人当用户选择该项对应数字后, 进入该函数。 创建候选人文档, 输入候选人信息。 用 for 语句和 if 语句检查编号、 姓名是否重复。 在确认不再创建新候选人信息后输出所有候选人 信息。6addUser() 创建用户当用户选择该项对应数字后,进入该函数。创建用户文档,输入用户账号与密码。用 for 语句和 if 语句检查账号名是否重复。 在确认不再创建新用户信息后输出所有用户信息。7read() 读取候选人信息打开候选人文档,提取文档内内容8scan() 浏览候选人信息先调用 read

6、()读取候选人信息,利用 for 语句输出9search() 查询候选人信息先调用 read ()读取候选人信息,利用 for 语句查找与输入编号一致的候选人信息并 输出,若查无此编号则输出“对不起,没有您要查询的候选人” 。10. sort() 整理所有投票先调用 read ()读取候选人信息,利用 for 语句,使用选择法对投票数进行排序,并 输出。11. vote() 投票者投票先调用 read ()读取候选人信息,输入候选人相应编号,利用 for 语句,将对应候选 人的投票数 1,并返回到文档中,输出投票结果。若查无此编号,输出“投票失败!您要 投票的号码不存在”。六结果初始界面分别输

7、入 1,1 进入管理员界面创建新候选人输出候选人信息投票者界面投票以及投票结果候选人票数排序结果七心得体会在本次课程设计中, 先使用结构化分析方法对系统进行分析, 将整个系统细分为几个模 块,再针对每个小模块编写代码。通过本次课程设计的学习以及老师的指导,学会了很多 东西,了解了开发一个系统的一些步骤。尽管大部分都参考权威书籍的代码,但是在编写 代码过程中还是加深了对链表的了解程度。开发工具用的是 vc+6.0 。这个程序还存在很 多需要改进的地方,如密码输入后直接显示了出来,而不是 * ,缺少安全性;每个投票人不 仅仅只能投一票等等。但我会继续努力学习,争取写出更好的程序源代码#includ

8、e<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#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

9、 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

10、_userN;void main_v()/ 投票者者界面int key;do*n");printf("printf("欢迎进入投票员界*n");printf("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

11、 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(

12、"%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)/ 如果当前文件不存在,提示打开文件失败printf("nOpen file is fail!End wi

13、th any key.n",DataFile);perror("Open file fail");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(DataFile,"rb");/ 显示投票后的情况if(fp=

14、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)t%dprintf("n%ld

15、t%sn",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*n");printf("printf("欢迎进入管理员界面*n");*n");printf(&

16、quot;printf("* 1. 创建 新候 选人 *n");printf("* 3. 查询候选人信息 *n");2. 创建新 用户4.浏览所有候选人*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!=

17、0);void addcandidate()/ 创建候选人FILE * fp=NULL;char c;int over_flag=0;candidate TempS;read();fp=fopen(DataFile,"ab+");doprintf("创建新候选人*n");printf(" 请输入 :");printf(" 候选人号码 :");scanf("%ld",&TempS.number);for(i=0;i<c_total;i+)/ 检查输入编号是否有重复if(TempS.n

18、umber=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(" 该姓名已存在!请再输入一次!按

19、任意键继续 .");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

20、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,"

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

22、");printf("n 按任意键返回首页! ");getch();void read()/ 读取候选人信息char DataFile20=" 候选人 .txt"FILE * fp=NULL;c_total=0;fp=fopen(DataFile,"rb");if(fp=NULL)任意键结束 n",DataFile);printf("nOpen file %s fail! perror("Open file fail"); getch();exit(1);while(fread(&am

23、p;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",D

24、ataFile);perror("Open file fail");getch();exit(1);while(fread(&total_usertotal,sizeof(user),1,fp)!=(int)NULL)total+;fclose(fp);fp=fopen(DataFile,"ab+");doprintf("创建新用户);printf(" 请输入 :");TempS.name19='0'for(i=0;i<total;i+)/ 检查输入姓名是否有重复if(strcmp(TempS.

25、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.p

26、ower=0;total_usertotal=TempS;/ 将数据加入原始数据total+;if(fwrite(&TempS,sizeof(user),1,fp)!=1)printf("nwrite file is fail! 任意键结束 n",DataFile);perror("write file fail");printf(" 要继续创建新用户吗 ?是 (Y)/ 否 (N):");getchar();c=getchar();while(c='Y'|c='y');fclose(fp);pr

27、intf("用户资料数据处理完毕 .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");printf("n姓名tt 密码tt 权限 n");while(f

28、read(&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;i<c_total;i+)printf(

29、"号码 :%-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();doprintf("nt 请输入要查询的候选人号码 :");scanf("%ld

30、",&number);for(i=0;i<c_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;elseprintf("t对不起,没有您要查询的候选人 n&quo

31、t;);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;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.

32、vote<c_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;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(

温馨提示

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

评论

0/150

提交评论