活动管理程序一、需求分析1、系统概述:设计一个活动管理程序,该程序具有以下功能:(1)多用管理,用户登录:输入用户名和密码,密码正确才允许登录。(2)可以创建活动,设定活动的内容,活动的人数,时间,要求等;(3)登录的所有用户可以查看当前所有正在征集的活动,并可以选择参加;(4)活动的创建者,可以删除创建的活动;(5)用户可以查看,自己选择参加的活动,并发表评论;(6)统计功能:对结束征集的活动,统计参加的人数并显示参加活动的人员名单。2、系统运行环境:(1)硬件环境:CPU:奔腾3以上内存:1G以上显卡:集成显卡硬盘:10M以上(2)软件环境:操作系统:windows95以上DOS系统支持中文输出3、功能需求描述:(1)登录模块:每个使用这个系统的用户都必须注册账号,账号作为每个用户登陆的唯一登陆凭证,登陆模块就是为了验证账户的真实性而设,只有用户名与其设定的密码匹配时才允许使用这个系统功能。(2)信息公示窗口模块:本模块是用户登陆成功后最先进入的,是本系统的基础,在这个模块中用户可以选择进入其他模块和退出本系统。(3)创建活动模块:在此模块,用户可以根据自身的需要输如创建活动的个数,按照系统提示输入内容即可创建活动,系统会根据你输入的时间来决定活动是否开始征集(4)报名活动模块:此模块会显示所有正在征集的活动,用户可以选择报名或者返回,如果选择报名,即可通过进入活动的编号进行报名。(5)评论模块:用户可通过此模块对已报名的活动发表评论和查看想要报名的活动评论。(6)用户活动模块:在此模块,用户可查看自身所创建的活动,分别查看未在征集的活动、正在征集的活动和结束征集的活动,并且查看活动已报名的人员。二、总体设计1、总体开发思想:(1)主要的数据结构:在用户信息储存方面,我们采用线性表的存储方式存储学生数据。首先,在users结构体中,我们存储了一个账号的相关信息,如账号、名字和密码,如图。在活动信息储存方面,我们采用线性表的存储方式。首先,在ss结构体中,我们存储了一个关于活动情况的基本信息,如:活动名称、活动开始时间及结束时间、活动要求人数等。及在comment结构体中,我们存储了关于活动评论的基本信息。在action结构体中,存储了用户所报名的活动。在程序开始时,将所有内容从文件中读到结构体数组中。(2)数据存贮方式:本程序中的大部分数据储存在几大结构体组成的线性表中,在用户数据部分,我们采用了链表的线性表的存储方式,程序开始操作便将所有的用户信息读入结构体数组中,结构体数组中的每一个元素代表一个用户信息。而在活动信息的储存上也是如此,在程序开始操作便将所有活动信息读入ss的结构体数组中。此后,程序的所有操作便在结构体数组中进行。在文件操作部分,本程序使用了二进制文件储存,在保存时使用fprintf将结构体数组ss中的内容存进文件中,在读取信息则用fscanf从文件中将所有信息读入结构体信息中。(3)使用的语言:C\C++语言2、系统模块结构图:3、模块设计:以下为各个功能模块的流程图安全设置模块系统初始化修改密码设置新密码输入旧密码用户确认初始化操作输入新密码返回菜单三、功能实现1、主要函数:函数名及参数含义;(1)账户主要函数:voidRegistered();//此为注册函数voidlanding();//此为登陆函数voidxiugai();//此为修改密码函数(2)活动信息函数:intprint();//此为菜单函数,显示所有用户可进行的操作,调用此函数会返回用户选择的选项编号voidcr(intm);//此为创建活动函数,代表目前已创建的活动个数voidseek(intm);//m代表目前已创建的活动个数,此为活动报名函数,此函数会分页显示所有符合征集时间的活动voidselect(intm);//此为活动删除函数,用户可通过此函数删除自身所创建的活动,删除成功则返回1,否则返回0voidcheck1(intm);//用户通过此函数查看自身已报名的活动voidcomm(intm);//此为评论查看函数,输入查找评论的活动名称,成功则显示所有评论,否则显示失败voidsay(intm);//此为评论发表函数,用户通过此函数对已报名的活动发表评论voidfound(intm)//此为用户自身活动查看函数,用户可通过此函数查看自身创建的正在征集的活动、结束征集的活动和未开始征集的活动。(2)查找函数:intsea(structsslyq[],charname[],intlen)//此为二分查找函数,lyq[]代表结构体数组,name代表查找活动的名字,len代表结构体数组的长度boolCmpare(constss&a,constss&b){returnstrcmp(a.actionname,b.actionname)0;}boolcmp(constss&a,constss&b){returna.nob.no;}#includestdio.h#includestring.h#includeconio.h#includestdlib.h#includealgorithm#includeiostream#includetime.h#includewindows.h#definesd(a)scanf(%d,&a)#definesdd(a,b)scanf(%d%d,&a,&b)#definesddd(a,b,c)scanf(%d%d%d,&a,&b,&c)//#definefor(i,n)for(i=0;i(n);i++)//#definefoor(i,n,c)for(inti=c;i=n;i++)#definemst(x,a)memset(x,a,sizeof(x))#definess(a)scanf(%s,a)intd[1000000];usingnamespacestd;FILE*fp,*fp1,*fp2;charuu[1000];charyy[1100];longlongko=0,k1=0,k2=0;structs{charid[500];charname[500];charpwd[500];}ac[1000];structss{charname[50];charnumbering[20];charactionname[100];intno;intnumber;intyear;intmonth;intday;inthour;intmintue;intyear1;intmonth1;intday1;inthour1;intmintue1;charremarks[500];intok;intyes;intcountt;}lyq[1500000],io[1000000];structcomment{charname[200];charid[20];charsentence[500];}ww;structaction{charname[200];charid[20];charactionname[100];}qq;boolCmpare(constss&a,constss&b){returnstrcmp(a.actionname,b.actionname)0;}boolcmp(constss&a,constss&b){returna.nob.no;}intsea(structsslyq[],charname[],intlen){intlow,mid,high;low=0;high=len-1;while(low=high){//printf(dshdjhfd1131);mid=(low+high)/2;if(strcmp(lyq[mid].actionname,name)0){//printf(dshdjhfd);low=mid+1;}elseif(strcmp(lyq[mid].actionname,name)0){//printf(11111111);high=mid-1;}elsereturnmid;}return-1;}voidRegistered(){charch;charw1[500];FILE*fp;chartext[500];here:printf(请输入你的账号:);ss(w1);inti=0;intbn=0;for(i=0;ik1;i++){if(strcmp(w1,ac[i].id)==0)bn=1;}if(bn==1){printf(此账号已存在!\n);pp:printf(1.重新输入2.结束\n);chart;t=getch();;if(t=='1')gotohere;elseif(t=='2'){exit(0);}else{printf(输入错误,请重新输入!\n);gotopp;}}chartt[500];printf(请输入你的用户名:);ss(tt);strcpy(ac[k1].name,tt);hre:charpp[500]={0};intf=0;i=0;charqh={0};printf(请输入你的密码:);while((ch=getch())!='\r'){if(ch=='\b'){if(i0){i--;printf(\b\b);}elseputchar(7);}else{pp[i++]=ch;printf(*);}}pp[i]='\0';printf(\n请再次输入你的密码:);while((qh=getch())!='\r'){if(qh=='\b'){if(f0){f--;printf(\b\b);}elseputchar(7);}else{text[f++]=qh;printf(*);}}text[f]='\0';while(strcmp(pp,text)!=0){printf(\n两次密码不一致,请修改密码!\n);gotohre;}//printf(\n注册成功!\n);strcpy(ac[k1].id,w1);strcpy(ac[k1].pwd,pp);printf(\n注册成功!\n);k1++;Sleep(1000);}voidlanding(){qqw://system(CLS);intok=0;inti;charchq[500];printf(欢迎登陆信息管理系统\n);printf(请输入你的账号:);ss(chq);intll;for(i=0;ik1;i++){if(strcmp(chq,ac[i].id)==0){strcpy(yy,ac[i].name);ok=1;ll=i;break;}}if(ok==0){printf(此用户名不存在!\n);to:printf(请选择\n1.重新输入2.注册账号\n);charn;n=getch();if(n=='1')gotoqqw;elseif(n=='2')Registered();else{printf(输入错误,请重新输入!);gototo;}}else{strcpy(uu,chq);intqw=0;charww[500];printf(请输入密码:);charch=0;inti=0;while((ch=getch())!='\r'){if(ch=='\b'){if(i0){i--;printf(\b\b);}elseputchar(7);}else{ww[i++]=ch;printf(*);}}ww[i]='\0';charrr[500]={0};do{if(strcmp(ww,ac[ll].pwd)==0){qw=1;fclose(fp);printf(登陆成功,欢迎使用!\n);break;}else{i=0;printf(\n密码不正确!\n);pp:printf(请选择\n1.重新输入密码2.重新输入账号3.注册账号\n);chary;y=getch();if(y=='1'){printf(请输入密码:);while((ch=getch())!='\r'){if(ch=='\b'){if(i0){i--;printf(