C语言 抽取幸运观众,要求录入幸运观众的编号,姓名,手机号码保存在file05.txt 中,然后从中抽取3位不重复的观众并显示显示姓名电话号码等,将抽取的3位,将观众保存在另一个文件里,最后要有退出功能的同时,也可以删除观众信息编号等
时间: 2024-03-17 21:45:49 浏览: 173
一个抽取幸运观众的代码
好的,我会为您解答关于C语言抽取幸运观众的问题。
首先,您需要定义一个结构体来保存幸运观众的编号、姓名和手机号码。
```c
struct Viewer {
int number;
char name[50];
char phone[20];
};
```
接下来,您需要编写函数来录入幸运观众的信息,并将其保存到文件中。下面是一个示例函数:
```c
void addViewer() {
struct Viewer viewer;
FILE *file;
file = fopen("file05.txt", "a+");
printf("请输入幸运观众的编号:");
scanf("%d", &viewer.number);
printf("请输入幸运观众的姓名:");
scanf("%s", viewer.name);
printf("请输入幸运观众的手机号码:");
scanf("%s", viewer.phone);
fprintf(file, "%d %s %s\n", viewer.number, viewer.name, viewer.phone);
fclose(file);
printf("幸运观众信息录入成功!\n");
}
```
接着,您需要编写函数来抽取3位幸运观众,并将其保存到另一个文件中。下面是一个示例函数:
```c
void drawViewer() {
struct Viewer viewers[100];
int n = 0, i, j, k;
FILE *file1, *file2;
file1 = fopen("file05.txt", "r");
file2 = fopen("file06.txt", "w");
while (fscanf(file1, "%d %s %s", &viewers[n].number, viewers[n].name, viewers[n].phone) != EOF) {
n++;
}
if (n < 3) {
printf("幸运观众不足3人,无法进行抽奖!\n");
return;
}
for (i = 0; i < 3; i++) {
do {
j = rand() % n;
k = 0;
while (k < i && viewers[j].number != viewers[k].number) {
k++;
}
} while (k < i);
fprintf(file2, "%d %s %s\n", viewers[j].number, viewers[j].name, viewers[j].phone);
printf("第%d位幸运观众:%s,%s\n", i + 1, viewers[j].name, viewers[j].phone);
}
printf("幸运观众抽取成功!\n");
fclose(file1);
fclose(file2);
}
```
最后,您需要编写一个菜单程序,让用户可以选择录入幸运观众信息、抽取幸运观众、删除观众信息或退出程序。下面是一个示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct Viewer {
int number;
char name[50];
char phone[20];
};
void addViewer() {
struct Viewer viewer;
FILE *file;
file = fopen("file05.txt", "a+");
printf("请输入幸运观众的编号:");
scanf("%d", &viewer.number);
printf("请输入幸运观众的姓名:");
scanf("%s", viewer.name);
printf("请输入幸运观众的手机号码:");
scanf("%s", viewer.phone);
fprintf(file, "%d %s %s\n", viewer.number, viewer.name, viewer.phone);
fclose(file);
printf("幸运观众信息录入成功!\n");
}
void drawViewer() {
struct Viewer viewers[100];
int n = 0, i, j, k;
FILE *file1, *file2;
file1 = fopen("file05.txt", "r");
file2 = fopen("file06.txt", "w");
while (fscanf(file1, "%d %s %s", &viewers[n].number, viewers[n].name, viewers[n].phone) != EOF) {
n++;
}
if (n < 3) {
printf("幸运观众不足3人,无法进行抽奖!\n");
return;
}
for (i = 0; i < 3; i++) {
do {
j = rand() % n;
k = 0;
while (k < i && viewers[j].number != viewers[k].number) {
k++;
}
} while (k < i);
fprintf(file2, "%d %s %s\n", viewers[j].number, viewers[j].name, viewers[j].phone);
printf("第%d位幸运观众:%s,%s\n", i + 1, viewers[j].name, viewers[j].phone);
}
printf("幸运观众抽取成功!\n");
fclose(file1);
fclose(file2);
}
void deleteViewer() {
int number, flag = 0;
char name[50], phone[20];
FILE *file1, *file2;
file1 = fopen("file05.txt", "r");
file2 = fopen("file07.txt", "w");
printf("请输入要删除的幸运观众的编号:");
scanf("%d", &number);
while (fscanf(file1, "%d %s %s", &number, name, phone) != EOF) {
if (number != flag) {
fprintf(file2, "%d %s %s\n", number, name, phone);
}
flag = number;
}
printf("幸运观众信息删除成功!\n");
fclose(file1);
fclose(file2);
remove("file05.txt");
rename("file07.txt", "file05.txt");
}
int main() {
int choice;
srand(time(NULL));
printf("欢迎使用幸运观众抽奖程序!\n");
while (1) {
printf("1. 录入幸运观众信息\n");
printf("2. 抽取幸运观众\n");
printf("3. 删除观众信息\n");
printf("4. 退出程序\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addViewer();
break;
case 2:
drawViewer();
break;
case 3:
deleteViewer();
break;
case 4:
printf("感谢使用幸运观众抽奖程序!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
请注意,上述程序仅作为示例,实际应用中可能需要根据具体需求进行修改和完善。
阅读全文