VC抽奖程序VC抽奖程序
题目:教工趣味抽奖程序
1(设计目的
, 训练随机数的控制
, 训练结构体数据编程
, 训练文件编程
2(设计要求
, 事先把教工的编号、姓名、部门存入电脑 , 运行过程:
, 选择抽奖的等级,并输入该等级的人数
, 人员滚动显示,按任意键抽取(一个或一组),本等级抽取完毕,集中显示
, 直到抽取所有等级的人员
, 一个人只能被抽中一次
3(设计内容
(1)程序流程
程序流程(主函数的流程和功能)如图所示:
开始
用户登陆
输入班级信息
主界面
输入基本信息 分组抽奖 显示抽...
VC抽奖程序
题目:教工趣味抽奖程序
1(设计目的
, 训练随机数的控制
, 训练结构体数据编程
, 训练文件编程
2(设计要求
, 事先把教工的编号、姓名、部门存入电脑 , 运行过程:
, 选择抽奖的等级,并输入该等级的人数
, 人员滚动显示,按任意键抽取(一个或一组),本等级抽取完毕,集中显示
, 直到抽取所有等级的人员
, 一个人只能被抽中一次
3(设计内容
(1)程序流程
程序流程(主函数的流程和功能)如图所示:
开始
用户登陆
输入班级信息
主界面
输入基本信息 分组抽奖 显示抽奖结果 密码维护
结束
主函数代码如下:
#include
#include
#include
#include
#include
#include
using namespace std;
struct user // 存放密码 {
char username[11];
char password[11]; }up[10]={"",""};
char filename[20]={""}; // 存放文件名
struct stu
{
int bh;
char xm[10];
int dj;
}x[31]={0,"",0};
int num,i;
void main()
{
char yn='n',choice;
system("color 1f");
cout<<"\n\n\n\t\t\t欢 迎 登 陆 趣 味 抽 奖 系 统 "<>choice;
switch(choice)
{
case '1':
Inputryxx();
break;
case '2':
fzchoujiang();
break;
case '3':
Printxx();
break;
case '4':
ModifyUser();
break;
case '0':
cout<<"\n\n是否结束程序,y/n,? ";
cin>>yn;
}
} while(yn=='n' || yn=='N');
}
(2)数据设计
? 学生信息:学号、姓名和成绩存放在一个结构体数组x[]中,数组x为全局变量,
可以供每个功能使用。
struct stu
{
int xh;
char xm[10];
int dj;
}x[61]={0,"",0};
? 用户名和密码:存放在全局结构体数组up[]中,最后保存在user.dat文件里。
struct user // 存放密码
{
char username[11];
char password[11];
}up[10]={"",""};
? 文件名:存放在一个全局字符型数组filename[20]中。 (3)程序的功能
程序的功能:用户登陆、输入抽奖基本信息、输入参加抽奖人员信息、分组抽奖和显示
抽奖结果。
? 用户登陆:是操作的安全,通过输入用户名和密码来实现的。 ? 输入抽奖基本信息:是为了产生存放抽奖人员信息的文件名。 ? 抽奖人员基本信息输入:输入参加抽奖人员的编号和姓名。 ? 分组抽奖:按组取每个人的奖项。
? 显示抽奖结果:按要求输出抽奖结果。
? 用户名和密码维护:可以增加、删除用户,可以修改密码。 (4)程序功能及代码
? 用户登陆
用户登陆功能由用户名输入函数InputUserName()和密码输入函数InputPassWord()实
现。
用户名输入函数InputUserName()的流程如图所示:
打开用户名和密码文件
提示输入用户名
与设置的用户名比较
三次不对就结束程序
关闭文件
函数代码如下:
void InputUserName()
{
string str;
fstream userfile;
userfile.open("user.dat",ios::in);
if(!userfile)
{
cout<<"filename can't open.\n";
abort();
}
userfile.read((char *)up,sizeof(up));
userfile.close();
int check=0;
printf("\n\t\t\t\t 用户名: ");
for(int n=3;n>0;n--)
{
cin>>str;
i=0;
while(str.compare(up[i].username) && i<11)
i++;
if(i<11)
{
check=1; break;
}
else
{
printf(" 用 户 名 不 正 确, 请 重 新 输 入 : ");
}
}
if(!check)
{
cout<0);
if(!check)
{
cout<>nf;
strcat(filename,nf);
cout<<"\n 月份(如12):";
cin>>yf;
strcat(filename,yf);
cout<<"\n 抽奖名称(如“团拜会”):";
cin>>mc;
strcat(filename,mc); }
? 抽奖人员基本信息输入
输入抽奖人员基本信息由函数Inputryxx()实现,其流程如图所示:
打开抽奖人员文件
提示输入抽奖人数
循环输入人员姓名,编号可以自动产生?数组x
保存人员信息,关闭文件
函数代码如下:
void Inputryxx() // 输入人员基本信息 {
fstream outfile;
int i,num;
outfile.open(filename,ios::out);
if(!outfile)
{
cout<<"filename can't open.\n";
abort();
}
do
{
cout<<"\n 输入抽奖人数(1-60):";
cin>>num;
if(num<1||num>60)
cout<<" 人数越界~请重新输入!"<60);
x[0].bh=1;
cout<<"编号\t姓名\n";
for(i=0;i>x[i].xm;
x[i].dj=0;
x[i+1].bh=x[i].bh+1;
}
x[i].bh=0,x[i].dj=0;
outfile.write((char *)x,sizeof(x));
outfile.close();
}
? 分组抽奖
分组抽奖功能由函数fzchoujiang()实现,其流程如图所示:
打开人员文件
子界面
所有奖项重抽 抽取一等奖 抽取二等奖 抽取三等奖 抽取四等奖
写文件
为了实现该函数的功能,又设计了几个子函数: , 抽奖子函数choujiang(int n):抽取n等奖 , 显示抽奖等级函数printdj(int n):显示n等奖 , 读文件函数readfile(int &ynopen):读取人员信息 , 写文件函数writefile():保存抽奖结果 , 清空n等奖cleardj(int n):清空n等奖的结果,可以重抽
, 统计参见抽奖人员countren():统计参加抽奖的人数,用于产生“1-人员数”的
随机数
函数代码如下:
int countren() //统计参加抽奖人数
{
int i=0;
while(x[i].bh!=0)
i++;
return i;
}
void cleardj(int n) // 等级清空
{
int i=0;
while(x[i].bh!=0)
{
if(x[i].dj==n)
x[i].dj=0;
i++;
}
}
void writefile() // 写文件
{
fstream outfile;
outfile.open(filename,ios::out);
if(!outfile)
{
cout<<"filename can't open.\n";
abort();
}
outfile.write((char *)x,sizeof(x)); // 读数据
outfile.close();
}
void readfile(int &ynopen) // 读文件 {
fstream infile;
char anykey;
infile.open(filename,ios::in);
if(!infile)
{
infile.close();
cout<<"\n\n参加抽奖人员信息没有建立~请选取“1.输入人员基本信息”! \n";
cout<<"\n\t按任意键继续...... "<>rs;
cout<<"\n\n\t "<>choice;
switch(choice)
{
case '1': choujiang(1); writefile(); break;
case '2': choujiang(2); writefile(); break;
case '3': choujiang(3); writefile(); break;
case '4': choujiang(4); writefile(); break;
case '5':
i=0;
while(x[i].bh!=0) // 清除抽奖记录
{
x[i].dj=0; i++;
}
break;
case '0':
writefile();
cout<<"\n\n\t是否返回主菜单,y/n,? ";
cin>>ynn;
break;
}
cout<<"\n\t按任意键继续...... "<>choice;
switch(choice)
{
case '1': Printcj(1); break;
case '2': Printcj(2); break;
case '3': Printcj(3); break;
case '4': Printcj(4); break;
case '0':
cout<<"\n\n\t是否返回主菜单,y/n,? ";
cin>>ynn;
}
cout<<"\n\t按任意键继续...... "<>choice;
switch(choice)
{
case '1':
i=0;
cout<<"\n\n 增加用户"<>up[i].username;
j=0;
while(strcmp(up[i].username,up[j].username)!=0)
j++;
if(j==i)
{
cout<<" 请输入用户密码(1-10个字符):";
cin>>up[i].password;
}
else
cout<<" 该用户已经存在:";
break;
case '2':
cout<<" 请输入要删除的用户名:";
cin>>delname;
cout<<" 是否确认(y/n),:";
cin>>yn;
if(yn=='Y'||yn=='y')
{
i=0;
while(strcmp(delname,up[i].username)!=0 && i<11)
i++;
if(i==11)
cout<<" 用户名错误或没有该用户:";
else
for(j=i+1;j<11;j++)
{
strcpy(up[j-1].username,up[j].username);
strcpy(up[j-1].password,up[j].password);
}
}
break;
case '3':
cout<<" 请输入用户名:";
cin>>delname;
i=0;
while(strcmp(delname,up[i].username)!=0 && i<11)
i++;
if(i==11)
cout<<" 用户名错误或没有该用户:";
else
{
cout<<" 请输入用户旧密码:";
cin>>oldpassword;
if(strcmp(oldpassword,up[i].password)!=0)
{
cout<<" 用户旧密码错误:";
break;
}
else
{
cout<<" 请输入用户新密码:";
cin>>up[i].password;
}
}
break;
case '4':
i=0;
cout<<"\n\n用户名\t密码\n";
while(strcmp(up[i].username,"")!=0)
{
cout<>ynn;
}while(ynn=='n'||ynn=='N'); }
本文档为【VC抽奖程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。