13725528132 李桂荣
13725528131 李二来
13725528133 张荣刚
13725528130 荣南
13725528137 王三
13725528138 吴立
13725528139 郭德纲
13725528140 周星驰
13725528141 张曼玉
13725528142 张艺谋
13725528152 秦香莲
13725528162 潘金莲
13725528172 李大嘴
13725528182 展堂
//源代码如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 9999
//定义保存人名和电话的数据结构
struct Person
{
char name[20]
char telno[15]
char award
}
int num = 0//统计人数
FILE *fp//文件指针
Person persons[MAX_NUM]//定义数组
int awarder_1[1] = {-1}//一等奖
int awarder_2[2] = {-1, -1}//二等奖
int awarder_3[5] = {-1, -1, -1, -1, -1}//三等奖
//读取文件
void readdata()
{
int i = 0//数组下标
Person person
//文件打开
fp = fopen("data.txt", "r")
if (fp == NULL)
{
printf("打开文件data.txt失败!\n")
return
}
//当文件不为空
while (!feof(fp))
{
num ++
fscanf(fp, "%s", person.telno)
fscanf(fp, "%s", person.name)
person.award = 'F'
persons[i++] = person
}
}
//初始化标识
void init()
{
for(int i = 0i <numi++)
{
persons[i].award = 'F'
}
}
//显示单个中奖信息
void info( int i)
{
printf("手机号码: %s 姓名: %s\n", persons[i].telno, persons[i].name)
}
void main()
{
char again = 'Y'
//读取文件
readdata()
printf("简单抽奖程序\n")
srand((long)time(0))
while(again == 'Y' || again == 'y')
{
//初始化标识
init()
printf("\n开始抽第一等奖(1名),按任意键开始...\n")
getchar()
awarder_1[0] = abs(rand() % num)
while (persons[awarder_1[0]].award == 'T')
{
awarder_1[0] = rand() % num
}
persons[awarder_1[0]].award = 'T'
info(awarder_1[0])
printf("\n开始抽第二等奖(2名)\n")
for (int i = 0i <2i++)
{
printf("\n第%d个二等奖,按任意键开始...\n", i+1)
getchar()
awarder_2[i] = rand() % num
while (persons[awarder_2[i]].award == 'T')
{
awarder_2[i] = rand() % num
}
persons[awarder_2[i]].award = 'T'
info(awarder_2[i])
}
printf("\n\n开始抽第三等奖(5名)\n")
for (i = 0i <5i++)
{
printf("\n第%d个三等奖,按任意键开始...\n", i + 1)
getchar()
awarder_3[i] = rand() % num
while (persons[awarder_3[i]].award == 'T')
{
awarder_3[i] = rand() % num
}
persons[awarder_3[i]].award = 'T'
info(awarder_3[i])
}
printf("\n是否重新开始抽奖?(Y or N)...\n")
again = getchar()
}
getchar()
return
}
在定义函数时有时在语句前,有的在语句后。希望能帮到你!
// giftDlg.h : header file
//
#if !defined
#if _MSC_VER >1000
#pragma once
#endif // _MSC_VER >1000
// CGiftDlg dialog
class CGiftDlg : public CDialog
{
// Construction
public:
int FreeMem()
int ReSetData()
int InitData()//初始化数组
CGiftDlg(CWnd* pParent = NULL)// standard constructor
char *code[1000]//指向身份z号数组的指针
char *name[1000]//指向姓名数组的指针
char data[1000] //随机数组
int ptr//进度条当前指向随机数组的指针
int totalid//参加抽奖的id总数,如果抽出一个,自减1
bool bstart//标记进度条是否在滚动
// Dialog Data
//{{AFX_DATA(CGiftDlg)
enum { IDD = IDD_GIFT_DIALOG }
CButton m_btgo
CString m_code
CString m_msg
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGiftDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX)// DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon
// Generated message map functions
//{{AFX_MSG(CGiftDlg)
virtual BOOL OnInitDialog()
afx_msg void OnPaint()
afx_msg HCURSOR OnQueryDragIcon()
virtual void OnOK()
afx_msg void OnTimer(UINT nIDEvent)
afx_msg void OnCancelMode()
virtual void OnCancel()
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_GIFTDLG_H__21D8D4EF_07F4_4F29_9351_78F99BFF7723__INCLUDED_)
// giftDlg.cpp : implementation file
//
#include "stdafx.h"
#include "gift.h"
#include "giftDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__
#endif
// CGiftDlg dialog
CGiftDlg::CGiftDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGiftDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGiftDlg)
m_code = _T("")
m_msg = _T("")
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME)
}
void CGiftDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX)
//{{AFX_DATA_MAP(CGiftDlg)
DDX_Control(pDX, IDOK, m_btgo)
DDX_Text(pDX, IDC_STATIC_CODE2, m_code)
DDX_Text(pDX, IDC_STATIC_MSG, m_msg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGiftDlg, CDialog)
//{{AFX_MSG_MAP(CGiftDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_CANCELMODE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// CGiftDlg message handlers
BOOL CGiftDlg::OnInitDialog()
{
CDialog::OnInitDialog()
InitData()
bstart=false
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE) // Set big icon
SetIcon(m_hIcon, FALSE) // Set small icon
// TODO: Add extra initialization here
m_msg.Format ("按开始键开始滚动,抽奖箱中人数:%d",totalid)
UpdateData(FALSE)
return TRUE // return TRUE unless you set the focus to a control
}
// the minimized window.
HCURSOR CGiftDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon
}
void CGiftDlg::OnOK()
{
// TODO: Add extra validation here
if(bstart)
{
KillTimer(1)
bstart=false
m_msg.Format ("按开始键开始滚动,抽奖箱中人数:%d",totalid-1)
m_code.Format ("抽出的号码:%s\n姓名:%s",code[data[ptr]],name[data[ptr]])
//AfxMessageBox(m_code)
ReSetData()//剔除抽出的号码,重新打乱
if(totalid<1)
{
m_btgo.EnableWindow (FALSE)
}
m_btgo.SetWindowText ("开始")
}
else
{
SetTimer(1, 100,NULL)
bstart=true
m_msg.Format ("按停止键抽一个奖")
m_btgo.SetWindowText ("停止")
}
UpdateData(FALSE)
//CDialog::OnOK()
}
void CGiftDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_code.Format ("现在的号码:%s",code[data[ptr]])
UpdateData(FALSE)
ptr++
ptr%=totalid
CDialog::OnTimer(nIDEvent)
}
void CGiftDlg::OnCancelMode()
{
CDialog::OnCancelMode()
// TODO: Add your message handler code here
}
int CGiftDlg::InitData()
{
FILE * fp=fopen("id.txt","r")
ptr=0
totalid=1
if (fp==NULL)
{
return 0
}
char buf[80]
int line=0
while(!feof(fp))
{
char *p=fgets(buf,80,fp)
if (p!=NULL)
{
name[line]=(char*)malloc(80)
code[line]=(char*)malloc(80)
memset(code[line],0,80)
memset(name[line],0,80)
int flag=0
for(int i=0i<80&&buf[i]!='\0'i++)
{
if((buf[i]!=',' )&&(flag==0))
{
code[line][i]=buf[i]
}
else if(flag==0)
{
flag=i
}
else if((buf[i]!=',' )&&(flag!=0))
{
name[line][i-flag-1]=buf[i]
}
}
TRACE("%s-%s",code[line],name[line])
memset(buf,0,80)
line++
}
}
fclose(fp)
for(int j=0j<linej++)
{
data[j]=j
}
for(int i=0i<linei++)
{
int pos=rand()%(line-i)+i
int temp=data[i]
data[i]=data[pos]
data[pos]=temp
TRACE("%d",data[i])
}
totalid=line
return 1
}
int CGiftDlg::ReSetData()
{
//ptr剔除,与最后一个交换,然后释放内存
int line=totalid
int temp=data[ptr]
data[ptr]=data[line-1]
data[line-1]=temp
//AfxMessageBox(name[data[line-1]])
free(code[data[line-1]])
free(name[data[line-1]])
totalid--
line--
ptr=0
for(int i=0i<linei++)//重新打乱
{
int pos=rand()%(line-i)+i
int temp=data[i]
data[i]=data[pos]
data[pos]=temp
TRACE("%d",data[i])
}
return 1
}
int CGiftDlg::FreeMem()
{
int line=totalid
for(int i=0i<linei++)
{
free(code[i])
free(name[i])
}
return 1
}
void CGiftDlg::OnCancel()
{
// TODO: Add extra cleanup here
FreeMem()
CDialog::OnCancel()
}
id.txt
332601771212061,章鱼
110103198511110453,李光
21010119541201045X,周瑜
320304780102066,韩信
442601771212061,沈兵
510103198511110453,宏志
220101841201045X,范进
520304197801020661,曾国
352601771212088,乱马
540122198511110453,贾海
这是我刚编完的C++程序,用于双色球的抽奖<br>源代码如下:
<br>#include<iostream.h>
<br>#include<stdlib.h>
<br>#include<time.h>
<br>#include<windows.h>
<br>//#include<system.h>
<br>
<br>void NUM()
<br>
<br>int main()
<br>{
<br>int i,j,n
<br>char a
<br>cout<<".....开始?<Y/N>:"
<br>cin>>a
<br>if(a!='Y'&&a!='Y'+32)return 0
<br>for(j=0j++)
<br>{
<br>cout<<"输入投注的注数:"
<br>cin>>n
<br>
<br>for(i=0i<ni++)
<br>{
<br>
<br> cout<<"第"<<i+1<<"注为:"<<endl
<br> srand((unsigned int)time(0))
<br> Sleep(4000)
<br> NUM()
<br> cout<<endl
<br>}
<br>cout<<".....继续吗?<Y/N>:"
<br>cin>>a
<br>if(a=='Y'||a=='Y'+32)continue
<br>else
<br>{
<br> cout<<".......投注结束......"<<endl
<br> break
<br>}
<br>}
<br>return 0
<br>}
<br>
<br>void NUM()
<br>{
<br>int i,j,t
<br>int ball[6]={0}
<br>srand((unsigned int)time(NULL))
<br>cout<<"红球号码为:"
<br>for(i=0i<6i++)
<br>{
<br> t=rand()%33
<br> for(j=0j<6j++)
<br> {
<br> if(t==ball[j]||t==0)
<br> {
<br> t=0
<br> break
<br> }
<br> }
<br> if(t==0)
<br> {
<br> i--
<br> continue
<br> }
<br> ball[i]=t
<br>}
<br>for(i=0i<5i++)
<br>{
<br> for(j=0j<5-ij++)
<br> {
<br> if(ball[j]>ball[j+1])
<br> {
<br> t=ball[j+1]
<br> ball[j+1]=ball[j]
<br> ball[j]=t
<br> }
<br> }
<br>}
<br>for(i=0i<6i++)cout<<ball[i]<<" "
<br>cout<<endl
<br>cout<<"蓝球号码为:"
<br>cout<<rand()%15+1<<endl
<br>
<br>}
<br>
<br>用户手册:
<br>程序运行后,输入你所需要的注数
<br>程序每隔5秒产生一注号码
<br>
<br>示例:
<br>.....开始?<Y/N>:Y
<br>输入投注的注数:5
<br>第1注为:
<br>红球号码为:11 18 19 22 26 31
<br>蓝球号码为:13
<br>
<br>第2注为:
<br>红球号码为:3 6 7 27 28 32
<br>蓝球号码为:9
<br>
<br>第3注为:
<br>红球号码为:3 5 17 19 24 32
<br>蓝球号码为:9
<br>
<br>第4注为:
<br>红球号码为:2 11 19 25 29 32
<br>蓝球号码为:3
<br>
<br>第5注为:
<br>红球号码为:1 12 14 23 28 31
<br>蓝球号码为:1
<br>
<br>.....继续吗?<Y/N>:N
<br>.......投注结束......
<br>Press any key to continue
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)