#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/
#define numsubs 5/*学科数目*/
typedef struct message_student /*结构体定义*/
{
char number[6]
char name[20]
char sex[4]
float subject[numsubs]
float score
float average
int index
}student
extern int numstus /*学生数目*/
extern student *pointer /*指向结构体数组*/
extern int lens
int menu_select() /*函数声明*/
int openfile(student stu[])
int findrecord(student stud[])
int writetotext(student stud[])
void welcome()
void display1()
void showtable()
void sort(student stu[])
void deleterecord(student stu[],int i)
void addrecord(student stud[])
void display(student stud[],int n1,int n2)
void amendrecord(student stud[])
void count(student stud[])
void sortnum(student stud[])
void sortnum2(student stud[])
void sortname(student stud[])
void sortname2(student stud[])
void sortcount(student stud[])
void sortcount2(student stud[])
void statistic(student stud[])
void display1()
#endif
#include "head.h"
int menu_select()
{
char c
printf("\n\n")
printf(" | 1. 增加学生记录5.统计信息 |\n")
printf(" | 2. 查询学生记录6.打开文件 |\n")
printf(" | 3. 修改学生记录7.保存文件 |\n")
printf(" | 4. 学生纪录排序8.显示记录 |\n")
printf(" |0.退出系统 |\n")
printf("\n\n")
printf("请选择(0-8):")
c=getchar()
getchar()
return (c-'0')
}
#include "head.h"
int findrecord(student stud[])/*查找信息*/
{
char str[2]
int i,num
if(numstus==0)
{
printf("没有可被查找的记录\n")
return -1
}
else
{
printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n")
gets(str)
if(str[0]=='1') /*按学号查找*/
{
printf("请输入学号:")
gets(str)
for(i=0i<=numstusi++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i)
break
}
else continue
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("请输入姓名:")
gets(str)
for(i=0i<=numstusi++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i)
break
}
else continue
}
else if(str[0]=='3') /*按名次查找*/
{
printf("请输入名次:")
scanf("%d",&num)
getchar()
for(i=0i<=numstusi++)
if(num==stud[i].index)
{
display(stud,i,i)
break
}
else continue
}
if(i>numstus)
{
printf("没有查找所要的信息。\n")
return -1
}
return i
}
}
#include"head.h"
int openfile(student stu[])
{
int i=0,j
FILE *fp
char filename[20],str[2]
if(numstus!=0)
{
printf("已经有记录存在,是否保存?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y')
writetotext(stu)
}
printf("请输入文件名:")
gets(filename)
numstus=0
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("无法打开该文件\n")
return(-1)
}
fscanf(fp,"%d",&numstus)
fgetc(fp)
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number)
fscanf(fp,"%s",stu[i].name)
fscanf(fp,"%s",stu[i].sex)
for(j=0j<numsubsj++)
fscanf(fp,"%f",&stu[i].subject[j])
fscanf(fp,"%f",&stu[i].score)
fscanf(fp,"%f",&stu[i].average)
fscanf(fp,"%d",&stu[i].index)
i++
}
fclose(fp)
printf("文件读取成功\n")
printf("是否显示纪录?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1)
return(0)
}
#include "head.h"
void sort(student stud[])
{
int i,j=0
char str[5]
student *p
p=stud
if(numstus==0)
{
printf("没有可供查询的记录!")
}
while(1)
{
for(i=0i++)
{
printf(" 请输入查询方式:")
printf("(直接输入回车则结束查询 *** 作)\n")
printf("1.按照学号\t")
printf("2.按照姓名\t")
printf("3.按照名次\n")
gets(str)
if(strlen(str)==0) break
if(str[0]=='1')
{
printf("请输入排序次序:\n")
printf("1.升序排列\t")
printf("2.降序排列\n")
gets(str)
if(str[0]=='1')
sortnum2(p)
else
sortnum(p)
display(stud,0,numstus-1)
}
else if(str[0]=='2')
{
printf("请输入排序次序:\n")
printf("1.升序排列\t")
printf("2.降序排列\n")
gets(str)
if(str[0]=='1')
sortname2(p)
else
sortname(p)
display(stud,0,numstus-1)
}
else if(str[0]=='3')
{
printf("请输入排序次序:\n")
printf("1.升序排列\t")
printf("2.降序排列\n")
gets(str)
if(str[0]=='1')
sortcount2(p)
else
sortcount(p)
display(stud,0,numstus-1)
}
else printf("请输入1~3")
printf("是否退出排序?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y') break
}
return
}
}
void sortnum(student stud[])
{
int i,j
student temp
student *p
p=stud
for(i=0i<numstusi++)
for(j=0j<numstus-i-1j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j)
*(p+j)=*(p+j+1)
*(p+j+1)=temp
}
}
}
void sortnum2(student stud[])
{
int i,j
student temp
student *p
p=stud
for(i=0i<numstusi++)
for(j=0j<numstus-i-1j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j)
*(p+j)=*(p+j+1)
*(p+j+1)=temp
}
}
}
void sortname(student stud[])
{
int i,j
student temp
student *p
p=stud
for(i=0i<numstusi++)
for(j=0j<numstus-i-1j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j)
*(p+j)=*(p+j+1)
*(p+j+1)=temp
}
}
}
void sortname2(student stud[])
{
int i,j
student temp
student *p
p=stud
for(i=0i<numstusi++)
for(j=0j<numstus-i-1j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j)
*(p+j)=*(p+j+1)
*(p+j+1)=temp
}
}
}
void sortcount(student stud[])
{
int i,j
student temp
student *p
p=stud
for(i=0i<numstusi++)
for(j=0j<numstus-i-1j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j)
*(p+j)=*(p+j+1)
*(p+j+1)=temp
}
}
}
void sortcount2(student stud[])
{
int i,j
student temp
student *p
p=stud
for(i=0i<numstusi++)
for(j=0j<numstus-i-1j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j)
*(p+j)=*(p+j+1)
*(p+j+1)=temp
}
}
}
#include"head.h"
void statistic(student stud[])/*新增功能,输出统计信息*/
{
int i,j=0,k=0
char c1,str[2]
float average[numsubs],sum=0
if(numstus==0)
printf("没有可被查找的记录\n")
else
{
while(1)
{
printf("下面将统计考试成绩\n")
printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n")
c1=getchar()
printf("\t一共有个%d记录\n",numstus) /*总共记录数*/
switch(c1)
{
case '1':
for(i=0i<numstusi++)/*循环输入判断*/
{
sum+=stud[i].subject[0]
if(stud[k].subject[0]>stud[i].subject[0]) k=i
if(stud[j].subject[0]<stud[i].subject[0]) j=i
}
average[0]=sum/numstus
printf("\t科目A的最高分:\n") /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0])
printf("\t科目A的最低分是:\n") /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0])
printf("\t科目A的平均分是 %5.2f\n",average[0]) /*平均分*/
break
case '2':
for(i=0i<numstusi++)/*循环输入判断*/
{
sum+=stud[i].subject[1]
if(stud[k].subject[1]>stud[i].subject[1]) k=i
if(stud[j].subject[1]<stud[i].subject[1]) j=i
}
average[1]=sum/numstus
printf("\t科目B的最高分:\n") /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1])
printf("\t科目B的最低分是:\n") /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1])
printf("\t科目B的平均分是 %5.2f\n",average[1]) /*平均分*/
break
case '3':
for(i=0i<numstusi++)/*循环输入判断*/
{
sum+=stud[i].subject[2]
if(stud[k].subject[2]>stud[i].subject[2]) k=i
if(stud[j].subject[2]<stud[i].subject[2]) j=i
}
average[2]=sum/numstus
printf("\t科目C的最高分:\n") /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2])
printf("\t科目C的最低分是:\n") /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2])
printf("\t科目C的平均分是 %5.2f\n",average[2]) /*平均分*/
break
case '4':
for(i=0i<numstusi++)/*循环输入判断*/
{
sum+=stud[i].subject[3]
if(stud[k].subject[3]>stud[i].subject[3]) k=i
if(stud[j].subject[3]<stud[i].subject[3]) j=i
}
average[3]=sum/numstus
printf("\t科目D的最高分:\n") /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3])
printf("\t科目D的最低分是:\n") /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3])
printf("\t科目D的平均分是 %5.2f\n",average[3]) /*平均分*/
break
case '5':
for(i=0i<numstusi++)/*循环输入判断*/
{
sum+=stud[i].subject[4]
if(stud[k].subject[4]>stud[i].subject[4]) k=i
if(stud[j].subject[4]<stud[i].subject[4]) j=i
}
average[4]=sum/numstus
printf("\t科目E的最高分:\n") /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4])
printf("\t科目E的最低分是:\n") /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4])
printf("\t科目E的平均分是 %5.2f\n",average[4]) /*平均分*/
break
default:printf("输入错误!请输入1~5之间的数\n")
}
sum=0
getchar()
printf("是否继续进行统计?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y')
else break
}
}
}
#include"head.h"
int writetotext(student stud[])/*将所有记录写入文件*/
{
int i=0,j
FILE *fp
char filename[20]
printf("输入文件名称:")
gets(filename)
fp=fopen(filename,"w")
fprintf(fp,"%d\n",numstus)
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex)
for(j=0j<numsubsj++)
fprintf(fp,"%f ",stud[i].subject[j])
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index)
i++
}
fclose(fp)
printf("已成功存储!\n")
display(stud,0,numstus-1)
numstus=0
return 0
}
#include"head.h"
void welcome()
{
printf("\t*************************************************************\n")
printf("\t\t\t\t这是一个学生成绩管理系统\n\t\t\t\t 倾情奉献 欢迎使用!\n")
printf("\t*************************************************************\n")
}
void showtable()
{
printf("---------------------------------------------------------------------------------------\n")
printf("学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n")
printf("---------------------------------------------------------------------------------------\n")
}
void display(student stud[],int n1,int n2)
{
int i
showtable()/*显示表头*/
for(i=n1i<=n2i++)
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index)
/*通过循环输出数据*/
}
void display1()
{
printf("\t\t本系统由计应精英一组亲情制作\n\n")
printf("\t\t制作人员列表:(按比划)\n")
printf("\t\t王庆斌\t\t\t张威\n\t\t李智\t\t\t周在峰\n\t\t杨凯\t\t\t胡杨\n")
printf("\n\n")
getchar()
}
#include"head.h"
#include<string.h>
void amendrecord(student stud[])
{
char str[5] /*供用户输入*/
int i=-1,j
if(numstus==0)/*没有记录返回*/
printf("没有可供修改的记录!")
while(i<0)
{
i=findrecord(stud)
if(i>=0)
{
printf("要删除这个学生的信息吗?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i)
count(stud)
}
else
{
printf("确定要修改这个学生的信息吗?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y')
{
printf("下面请重新输入学生的信息:\n")
printf("请输入学号:")
gets(stud[i].number)
printf("请输入姓名:")
gets(stud[i].name)
printf("请输入性别(男/女 1/0):")
gets(str)
if(str[0]=='0')
strcpy(stud[i].sex,"女")
else
strcpy(stud[i].sex,"男")
stud[i].score=0
printf("请按顺序输入成绩:")
for(j=0j<numsubsj++)
{
scanf("%f",&stud[i].subject[j])
stud[i].score+=stud[i].subject[j]
}
getchar()
stud[i].average=stud[i].score/numsubs
}
count(stud)
}
display(stud,0,numstus-1)
}
printf("是否继续进行其他修改?(y/n)\n")
gets(str)
if(str[0]=='y'||str[0]=='Y')
i=-1
else i=1
}
}
void deleterecord(student stu[],int i) /*删除信息*/
{
int j
while(i>=0)
{
for(j=ij<numstusj++)
stu[j]=stu[j+1]
numstus--
printf("删除成功!\n")
}
}
void count(student stud[])
{
int i,j
for(i=0i<numstusi++)
{
stud[i].index=1
for(j=0j<numstusj++)
if(stud[j].score>stud[i].score)
stud[i].index++
}
}
#include "head.h"
void addrecord(student stud[])
{
int i=0,j,num
char str[5]
if(numstus!=0)
{
printf("已有记录存在是否覆盖?(y/n)\n")
gets(str)
if(str[0]=='Y'||str[0]=='y')
i=0
else i=numstus
}
printf("请输入增加的学生信息条目数:")
scanf("%d",&num)
if(i==0)
numstus=num
else numstus+=num
if(numstus>lens)
{
lens+=50
pointer=(student *)realloc(pointer,lens*LEN)
}
printf("请输入学生信息:\n")
for(i<numstusi++)
{
getchar()
printf("请输入学号:")
gets(pointer[i].number)
printf("请输入姓名:")
gets(pointer[i].name)
printf("请输入性别(男/女 1/0):")
gets(pointer[i].sex)
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女")
else strcpy(pointer[i].sex,"男")
printf("请输入各科成绩:(按ABCDE的顺序):")
stud[i].score=0
for(j=0j<numsubsj++)
{
scanf("%f",&stud[i].subject[j]) /*计算总分*/
stud[i].score+=stud[i].subject[j]
}
stud[i].average=stud[i].score/numsubs /*计算平均分*/
}
count(stud) /*附名次*/
display(stud,0,numstus-1)
getchar()
}#include "head.h"
int numstus
int lens
student *pointer
void main()
{
int i=1
char str[2]
lens=100
pointer=(student *)malloc(lens*LEN) /*分配内存*/
numstus=0
welcome() /*欢迎界面*/
while(i>0)
{
i=menu_select() /*控制菜单*/
switch(i)
{
case 1:addrecord(pointer)break /*增加学生信息*/
case 2:findrecord(pointer)break /*查询学生信息*/
case 3:amendrecord(pointer)break /*修改学生信息*/
case 4:sort(pointer)break /*学生信息排序*/
case 5:statistic(pointer)break /*统计信息*/
case 6:openfile(pointer)break/*打开文件*/
case 7:writetotext(pointer)break /*保存文件*/
case 8:display(pointer,0,numstus-1)break /*显示记录*/
case 0:
if(numstus!=0) printf("是否保存当前记录?(y/n)")
gets(str)
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer)
i=-1break/*退出系统*/
default:printf("请输入数字0~8:\n")i=1 /*输入错误*/
}
}
printf("\t\t欢迎再次使用本系统。\n\n")
display1()
}
自己一改就能用,给我加分哈!
在定义函数时有时在语句前,有的在语句后。希望能帮到你!
// 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,贾海
#include <stdio.h>#include <stdlib.h>
#include <time.h>
struct
{
char str[20] //名字
int no //号码
}a[99]={{" ",0}} //初始化
int main()
{
FILE *fp
char ch
int i,n=0,choice,who
fp=fopen("name.txt","r")
if(fp==NULL)
{
printf("can not open the file\n")
return 1
}
while((ch=fgetc(fp))!=EOF)
{
if(ch=='\n')n++ //一行一个名字,计算人数
}
rewind(fp)
for(i=0i<ni++)
{
a[i].no=i //每人对应的号码
fscanf(fp,"%s\n",a[i].str)
}
srand(time(NULL))
for(i=1i<ni++)
{
printf("=============\n1.抽取 0.退出\n=============\n")
scanf("%d",&choice)
if(choice==1)
{
loop:
who=rand()%n+1
if(a[who].no==0)goto loop
puts(a[who].str)
a[who].no=0 //抽取过的标志为0
}
else break
}
fclose(fp)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)