电子投票系统课程设计报告 文档在线提供_第1页
电子投票系统课程设计报告 文档在线提供_第2页
电子投票系统课程设计报告 文档在线提供_第3页
电子投票系统课程设计报告 文档在线提供_第4页
电子投票系统课程设计报告 文档在线提供_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

课程设计的内容编程建立一个小型电子投票系统二、课程设计的要求与数据1.开发环境:Wintc2.需求分析:电子投票平台作为一个用来进行投票统计的应用软件1)编程建立一个小型电子投票系统,其中包含电子投票、票数统计功能,。尽量做到提供一个简单的人机界面,系统界面友好,使用方便。2)软件的使用者分为两类,一类为管理员,可以对候选人信息进行初始化和修改,还可浏览候选人信息介绍,可对候选人的票数进行排序以及对系统的用户进行管理,创建使用者用户名和密码,还可以对用户信息进行增加、删除、修改和查询操作等。另一类为使用者—普通投票者,该类用户需要用管理员分配的用户名和密码正确登录系统,可以查询候选人介绍、投票等。投票是只需做到输入自己想要投票的候选人编号即可完成投票。3.功能需求描述电子投票系统是用来进行投票统计的系统软件,进入投票系统后应该需要先进行身份验证。如果是投票人,就可以用浏览和查询的方式了解各个候选人的介绍信息,根据候选人的介绍信息决定将选票投向哪位候选人。①投票人的投票方式:输入要选举的候选人的编号,即可完成投票;②投票人了解候选人的方式:浏览候选人列表,输入序号查询候选人介绍。如果是管理人员就可以进以下操作:①初始化候选人信息:在系统投入使用前需要先将需要投票选举的候选人信息录入系统中,以便投票和查看。管理员的初始化工作就是将候选人的序号、姓名和简介录入系统。②浏览候选人简介:为随时掌握候选人的信息,进行修改,管理员可以浏览候选人简介。③修改候选人简介:当候选人信息有所变化时,输入候选人序号,对信息进行修改。④查询投票情况:管理员有权查询当前各个候选人得票情况.⑤清除投票信息:当投票结束后,管理员可清除系统中所有候选人的票数,使之归零。⑥安全管理:管理员可以对投票人信息进行管理,投票人只有用管理员规定的用户名和密码才能进入系统进行投票。管理员还可以更改用户名、密码和权限,并对投票人信息进行增加、删除、查询、排序和初始化等操作。4.总体设计在对电子投票平台进行需求分析之后,接下来进行总体设计。先用图表的方式给出系统总体的设计架构,绘制系统模型结构图,并且通过模块功能树图对每个模块进行总体设计。电子投票平台是一个简易投票管理系统,每个投票者对候选人投票后系统都要及进更新并统计候选人所得票数。因此将投票的过程单独写成一个完整的函数,每次投票动作都必须调用该函数,将得票统计的文件中对应的候选人得票信息加一。采用程序设计中的选择结构,对大量数据的处理要用到循环和文件处理等基本技术来区分权限,以此来解决投票系统的安全问题。投票者只能进行投票,使候选人票数加一,无法对候选人票数进行修改。投票人可以根据候选人信息决定投票,对候选项人信息有浏览和查询的功能,但不可以修改。对系统关键信息的修改功能由管理员完成。系统模块结构图依据需求分析结果,电子投票平台可分为6个模块:功能选择、身份验证投票人管理候选人管理、投票区和得票区结果管理。系统模块结构如下图所示:功能选择功能选择身份验证身份验证投票人管理投票人管理电子投票平台平台候选人gaun电子投票平台平台候选人管理候选人管理投票区管理投票区管理得票区管理得票区管理模块设计功能选择模块:该模块为系统用户提供功能选择界面,管理员或投票人登录系统后都会看到对应自己权限的功能选择界面,输入自己的功能选项即可跳转到相应的功能执行函数。管理员功能选择界面管理员功能选择界面投票人功能选择界面功能选择投票人功能选择界面功能选择身份验证模块:身份验证模块的作用是为了保障系统的安全性和系统使用人员角色的区分。该模块需要从输入设备获取用户输入的用户名和密码,判断是否符合登录条件,其次要判断用户权限,从而决定其能使用的系统功能。获取用户名、密码获取用户名、密码判断用户名密码是否相符身份验证判断用户名密码是否相符身份验证判断用户权限判断用户权限调用功能选择界面调用功能选择界面投票人管理模块:该模块主要实现常规的管理功能,如投票人的初始化,即创建投票人文件、投票人信息增加、删除、修改和查询等。因此该模块主要用结构体类型的数组和文件的读写来完成对大量数据的管理操作。投票人信息初始投票人信息初始投票人管理删除投票人信息投票人管理删除投票人信息修改投票人信息修改投票人信息查询投票人信息查询投票人信息增加投票人信息增加投票人信息候选人管理模:候选人管理模块和投票人管理模块类似,要对大量有一定结构的信息进行管理操作,如增、删、改和查。因此定义候选人信息结构体,用于存储候选人信息记录,并且将大量记录存储在硬盘文件中以便保存。用文件的读写函数辅助实现各项功能。候选人管理初始化候选人管理初始化修改候选人信息修改候选人信息候选人管理候选人管理查询候选人信息查询候选人信息浏览候选人信息浏览候选人信息投票区模块:投票区模块用于完成系统的主体功能,提示投票人输入自己想要选举的候选人序号,系统立刻将该候选人对应的票数加一,并将目前的投票状况显示给投票人。要将候选人对应的票数增加,需读取候选人信息文件,将对应的候选人票数加一后再写回文件即可。投票人输入候选人代码投票人输入候选人代码读取候选人信息文件读取候选人信息文件投票区对应候选人票数加一投票区对应候选人票数加一更新票数后写回文件更新票数后写回文件显示当前投票状况显示当前投票状况得票结果管理模块:得票结果管理属于管理员的权限范围,该模块共有清空投票结果、得票结果按票数多少的排行浏览两大功能。能过得票结果排行浏览可得知哪位候选人选举成功。当选举结束后,可选择清空得票结果。按票数排行浏览按票数排行浏览得票结果管理得票结果管理清空得票结果清空得票结果系统的工作流程图:开始开始身份验证身份验证是是登陆密码相符?登陆密码相符?否否重新登陆否否重新登陆是是管理员?管理员?是是管理员功能选择投票人功能选择管理员功能选择投票人功能选择浏览候选人信息查询候选人信息退出投票候选人管理浏览候选人信息查询候选人信息退出投票候选人管理投票人管理得票结果管理退出结束三、详细设计与源程序代码:根据分析与设计,采用WinTC实现各模块功能。以下是系统的详细设计过程、各源程序代码清单及说明:功能选择1、模块描述功能选择模块为系统提供类似于菜单的功能,让用户输入功能选择项,并进入相应的功能执行程序。系统按权限分为管理员的功能选择和用户的选择。2、源文件定义admin.c管理员主控平台guest.c投票者主控平台shead.h候选人信息头文件3、函数声明Admin()函数功能:管理员功能选择界面。输入:用户选择的功能选项处理:根据用户选项跳转到相关功能函数输出:相关功能函数的处理或显界界。程序所在文件: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();/*创建信息文件*/externvoidAddRecord();/*增加*/externvoidDelRecord();/*删除*/externvoidModifyByNumber();/*修改*/externvoidQueryBySeatNum();/*按序号查询*/externvoidQueryByName();/*按姓名查询*/externvoidSortByheji();/*按票数统计查询*/程序所在文件:a/*管理员功能选择界面,根据用户选项调用相应函数实现系统功能*/#include"shead.h"#include"creat.c"/*creat.c:添加10名候选人,初始化系统工作*/#include"bintro.c"#include"qname.c"/*qname.c,按姓名察看候选人介绍*//*bintro.c:浏览候选人介绍,即显示候选人文件内容(没有投票结果)*/#include"modnum.c"/*modnum.c,根据候选人序号修改候选人介绍*/#include"sort.c"/*sort.c,投票结果排行*/#include"tovote.c"#include"clearv.c"voidAdmin(){intchoice=0;/*存放用户选项的变量*/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();/*根据用户选项调用相应函数*/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()函数功能:投票人功能选择。输入:投票人要使用的功能选项代码处理:根据代码跳转到相应功能函数的处理或执行界面。输出:相应功能函数界面。程序所在文件: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;*/}身份验证1、模块描述该模块判断要使用该系统的是投票人还是管理员,首先获取登录者的用户名和密码,其中密码的获取用不回显的方式输入,避免他人从旁窃取,在一定程度上保证安全性。当用户名和密码相符时,判断用户的权限并进入相应功能选择函数。当用户忘记密码时,给用户机会进行重新输入。2、源文件定义3、函数声明(1)main函数功能:用户登录系统,程序的入口输入:①用户名②用户密码③是否重新登录的字符选项处理:①比较用户名密码是否相符②不符时,提示用户是否重新登录,如用户不再登录,退出系统。③相符时,判断权限为管理员还是投票者,进入相应功能选择界面输出:①用户登录是否成功的提示②是否重新登录的提示③当前用户的权限和功能选择界面程序所在文件:#include"stdio.h"#include<stdlib.h>#include<conio.h>#include<string.h>#defineSIZE100typedefstruct{longNumber;/*用户序号*/charName[20];/*用户名称*/charps[8];/*用户密码*/intpower;/*用户权限*/}user;externvoidGuest();/*普通用户功能选择界面*/externvoidAdmin();/*管理员功能选择界面*/externvoidCreatUser();/*创建用户信息文件*/externvoidAddUser();/*增加用户记录*/externvoidDelUser();/*删除用户记录*/externvoidModifyByUserNumber();/*根据用户序号修改*/externvoidSortByUserNum();/*根据用户序号排序浏览*//*login.c:用户登录,判断用户名、密码、权限,根据权限调用相应功能选择界面*//*包含用户信息头文件包含创建用户信息、增加、删除、修改、排序的用户处理程序包含管理员、投票者的功能选择界面处理程序*/#include"user.h"#include"admin.c"#include"guest.c"/*对用户的创建、增加、删除、修改、排序*/#include"cuser.c"#include"adduser.c"#include"deluser.c"#include"munum.c"#include"sunum.c"intmain(){FILE*fp=NULL;userShow;userTmpS;/*临时存放用户信息的结构体变量*/charDataFile[40]="yonghu";/*存放用户信息的文件名为yonghu*/inti;charrelogin;/*是否重新登录的标志*/intsuccess=0;/*登录成功的标志*//*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文件,用来验证用户名和密码*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}/*循环读取文件校验用户名和密码是否正确*/while(fread(&Show,sizeof(user),1,fp)!=(int)NULL){/*如果通过验证,则将success成功登录标记设为1*/if((strcmp(TmpS.Name,Show.Name)==0)&&(strcmp(TmpS.ps,Show.ps)==0)){printf("\nloginsuccessful!\n");success=1;/*判断权限,如power的值为1,则是管理员,并调用管理员功能选择界面*/if(Show.power==1){printf("\nyourpowerisadministrator!\n");Admin();}/*判断权限,如power的值为0,则是投票者,并调用投票者功能选择界面*/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、模块描述该模块对投票人进行管理,只有用系统实现定义好的投票人用户名和密码才能正确登系统进行投票,系统亦可赋予用户管理员的权限,使用户能进入管理员功能选择界面执行相应的功能选项。系统对投票人的管理有信息初始化、增加、删除、修改和浏览。2、源文件定义cuser.c对投票人信息初始化。munum.c按序号查找并修改投票人信息sunum.c浏览投票人信息3、函数声明CreatUser()函数功能:初始化投票人或用户信息,系统首先录入一些用户信息,包括用户名、密码和权限,当系统投入使用后可以用这些初始的用户名和密码登录。输入:①初始化用户信息存储的文件名②用户信息的用户名、密码、权限③将用户信息写入文件④判断用户是否结束录入⑤显示初始化后的文件内容输出:列表显示初化后的文件内容。程序所在文件:/*creat.c:用于初始化候选人信息文件*//*******************************************************************/#include"stdio.h"/*函数CreatFile*/voidCreatFile(){FILE*fp=NULL;/*定义指向文件的指针*/candidateTmpS;/*定义进行操作时存放结构体变量的*/charDataFile[40]="";/*存储候选人信息的文件名*/inti;/*计算可输入数据的最大范围*//*====输入存放候选人信息的文件名====*/printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters.suffixcan'texceed3characters,partofexceedwillbediscarded.\n");gets(DataFile);/*如用户没有输入,则循环提示用户输入*/while(*DataFile==('\0')){printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters,suffixcan'texceed3characters.partofexceedwillbediscarded.\n");gets(DataFile);}/*用二进制写的方式打开文件,即创建文件*/fp=fopen(DataFile,"wb+");/*如果当前文件不存在,提示打开文件失败*/if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey.\n",DataFile);perror("Openfilefail");getch();exit(1);}/*如果成功打开或创建文件,则提示输入候选人序号、姓名、简介等相关信息*/printf("inputnumber,nameandgradeofenglish,mathandchinese.numberis0meansinputisend.\n");printf("Numberisnotexceed9figures,Nameisnotexceed20characters,rangeofgrade:0.00~1000.00\n");/*循环从键盘上读取用户输入的序号、姓名、简介等相关信息*/for(i=1;i<=10;i++){/*输入序号,如为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);/*====在屏幕上显示文件内容====*//*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()函数功能:增加用户信息输入:①增加用户的编号、用户名、权限②是否继续的选项输出:增加新用户后的文件内容程序所在文件:a/*adduser.c增加用户信息记录*/#include"stdio.h"voidAddUser(){FILE*fp=NULL;userShow;userTmpS;charDataFile[40]="yonghu";/*存储用户信息文件名*/intcount=1;/*计算可输入数据的最大范围*/fp=fopen(DataFile,"ab+");/*a+:当文件存在时,追加,当文件不存在时,创建*//*如果当前文件不存在,提示打开文件失败*/if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey.\n",DataFile);perror("Openfilefail");getch();exit(1);}/*如果成功打开文件,则提示输入用户相关信息*/printf("inputnumber,nameandsalary.numberis0meansinputisend.\n");printf("Numberisnotexceed9figures,Nameisnotexceed20characters,rangeofgrade:0.00~1000.00\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++;}/*如果输入的数据量超过最大允许的范围,则提示数据不能录入*/if(count>SIZE)printf("\nsorry,numberofdatacannotexceed%d\n",SIZE);fclose(fp);/*====在屏幕上显示增加操作后的文件内容====*/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()函数功能:删除投票人信息输入:①要删除的投票人信息所在文件名。②要删除的投票人信息的编号③是否继续删除的选项字符处理:①打开投票人信息文件②读取文件内容,获取要删节信息的编号③将文件信息写入数组,根据编号删除数组中相应纪录。④将执行了删除操作的数组结果写入文件输出:①是否继续删除的提示②执行了删除操作之后的文件内容程序所在文件:/*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指针指向存储数据的文件名====*/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;/*读文件到数组中,并根据删除编号完成删除功能*/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);/*====将删除后的结构体记录写入文件====*/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()函数功能:修改用户名、密码、权限信息输入:①要修改的用户所在文件名②修改用户的具体信息③要修改的用户编号处理:①打开文件②读取文件到数组,修改对应修改编号的数组项的具体内容③将修改过的数组保存到文件④显示修改后的文件输出:修改后的文件内容/*munum.c按用户序号修改用户信息*/#include"stdio.h"voidModifyByUserNumber(){inti,j,k;longmodnum;/*输入各项修改后信息*/longNumber;charName[20];charps[8];intpower;userTmpS;users[SIZE];/*SIZE,在user.h头文件中定义的常量,值为100*/intrecNumber;charDataFile[40]="yonghu",next;FILE*fp;/*====fp指针指向存储数据的文件名====*/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);/*输入要修改纪录的信息*/Number=modnum;printf("name=");scanf("%s",Name);printf("ps=");scanf("%s",ps);printf("power=");scanf("%d",&power);/*将文件中要修改的信息存入结构体数组*/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);/*====将删除后的结构体记录写入文件====*/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("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);/*询问是否继续修改*/printf("\nGoon?(y/n)");next=getche();putchar('\n');if(next=='y'||next=='Y')gotobegin;}SortByUserNum()函数 功能:排序浏览用户信息输入:要排序浏览的文件名。处理:①打开文件,读取文件到数组②对数组中的记录按照用户编号进行选择法排序③将选择排序后的数组写入文件④将排序后的文件显示输出:排序后的文件内容程序所在文件:/*sunum.c按用户需号排序浏览用户信息*/#include"stdio.h"voidSortByUserNum(){inti,j,k;userTmpS;users[SIZE];/*SIZE,在shead.h头文件中定义的常量,值为100*/intrecNumber=0;charDataFile[40]="yonghu";FILE*fp;/*====fp指针指向存储数据的文件名====*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openfilefail");getch();exit(1);}/*将文件中要排序的信息存入结构体数组*/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);/*====如果文件中有记录,则将各条记录按序号排序===*/if(recNumber>1){/*====用选择排序法进行按序号的排序====*/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;}/*====将排序好的结构体记录写入文件====*/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、模块描述候选人管理模块与投票人管理模块类似,完成候选人信息的初始化、候选人简介的修改、候选人简介按姓名的查询和候选人简介的浏览4个主要功能。候选人的结构体定义在shead.h头文件中。2、源文件定义3、函数声明voidCreatFile()功能:初始化候选人信息输入:①打开存放候选人信息的文件②候选人信息的名字和简介处理:①创建候选人信息文件②逐条录入候选人姓名和简介信息③将候选人信息写入文件④录入10个候选人后结束录入⑤显示初始化后的文件内容输出:①列表显示初始化后的文件内容程序所在文件:/*******************************************************************//*creat.c:用于初始化候选人信息文件*//*******************************************************************/#include"stdio.h"/*函数CreatFile*/voidCreatFile(){FILE*fp=NULL;/*定义指向文件的指针*/candidateTmpS;/*定义进行操作时存放结构体变量的*/charDataFile[40]="";/*存储候选人信息的文件名*/inti;/*计算可输入数据的最大范围*//*====输入存放候选人信息的文件名====*/printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters.suffixcan'texceed3characters,partofexceedwillbediscarded.\n");gets(DataFile);/*如用户没有输入,则循环提示用户输入*/while(*DataFile==('\0')){printf("\npleaseinputnewfilenametostoredata,endwithenter.");printf("\nNotice:Nameoffilecan'texceed8characters,suffixcan'texceed3characters.partofexceedwillbediscarded.\n");gets(DataFile);}/*用二进制写的方式打开文件,即创建文件*/fp=fopen(DataFile,"wb+");/*如果当前文件不存在,提示打开文件失败*/if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey.\n",DataFile);perror("Openfilefail");getch();exit(1);}/*如果成功打开或创建文件,则提示输入候选人序号、姓名、简介等相关信息*/printf("inputnumber,nameandgradeofenglish,mathandchinese.numberis0meansinputisend.\n");printf("Numberisnotexceed9figures,Nameisnotexceed20characters,rangeofgrade:0.00~1000.00\n");/*循环从键盘上读取用户输入的序号、姓名、简介等相关信息*/for(i=1;i<=10;i++){/*输入序号,如为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);/*====在屏幕上显示文件内容====*//*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()函数功能:修改候选人简介输入:①要修改的候选人所在文件名②修改候选人的具体简介③要修改的候选人编号处理:①打开文件②读取文件到数组。修改对应的数组项的具体内容。③将修改过后的数组保存到文件④显示修改后的文件输出:修改后的文件内容。程序所在文件:/*modnum.c:输入序号修改候选人简介*/#include"stdio.h"voidModifyIntro(){inti,j,k;longmodnum;/*存储用户输入的要修改的候选人序号*//*输入各项修改后信息*/longNumber;charName[20];charintro[80];candidateTmpS;/*定义进行操作时的临时结构体变量*/candidates[10];/*10个候选人*/intrecNumber;charDataFile[40]="",next;/*DataFile存储候选人信息的文件名,next为是否进行下一次删除操作的选项*/FILE*fp;/*====fp指针指向存储数据的文件名====*//*提示用户输入要进行修改记录的文件名*/printf("\npleaseinputthenameoffilewheredataisstored,endwithenterkey.\n");gets(DataFile);/*提示用户输入要进行修改记录的文件名*/while(*DataFile==('\0')){printf("\npleaseinputthenameoffilewheredataisstored,endwithenterkey.\n");gets(DataFile);}begin:/*以读的方式打开文件,如文件不存在,提示错误*/fp=fopen(DataFile,"rb");if(fp==NULL){printf("\nOpenfile%sfail!Endwithanykey\n",DataFile);perror("Openf

温馨提示

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

评论

0/150

提交评论