用c语言写出动物园的景点系统(要求景点信息写在文本文档中,可以对景点进行增删改查)
时间: 2023-03-15 08:10:16 浏览: 67
我可以提供一个基于C语言的动物园景点系统的示例:// 包含头文件
#include <stdio.h>
#include <stdlib.h>// 定义景点结构体
typedef struct {
char name[50];
int price;
int num;
} Spot;// 函数声明
void addSpot();
void updateSpot();
void deleteSpot();
void showSpot();// 主函数
int main() {
int choice;
printf("请选择您要进行的操作:\n1. 添加景点\n2. 修改景点\n3. 删除景点\n4. 显示景点\n");
scanf("%d", &choice); switch (choice) {
case 1:
addSpot();
break;
case 2:
updateSpot();
break;
case 3:
deleteSpot();
break;
case 4:
showSpot();
break;
default:
printf("输入错误。\n");
} return 0;
}// 添加景点函数
void addSpot() {
FILE *fp;
Spot spot;
fp = fopen("spot.txt", "a");
printf("请输入景点名称:");
scanf("%s", spot.name);
printf("请输入景点价格:");
scanf("%d", &spot.price);
printf("请输入景点数量:");
scanf("%d", &spot.num);
fprintf(fp, "%s %d %d\n", spot.name, spot.price, spot.num);
printf("景点添加成功!\n");
fclose(fp);
}// 修改景点函数
void updateSpot() {
FILE *fp;
Spot spot;
char name[50];
int price, num;
fp = fopen("spot.txt", "r+");
printf("请输入要修改的景点名称:");
scanf("%s", name);
while (fscanf(fp, "%s %d %d", spot.name, &spot.price, &spot.num) != EOF) {
if (strcmp(name, spot.name) == 0) {
printf("请输入新的景点价格:");
scanf("%d", &price);
printf("请输入新的景点数量:");
scanf("%d", &num);
fseek(fp, -2, SEEK_CUR);
fprintf(fp, "%d %d\n", price, num);
printf("景点修改成功!\n");
break;
}
}
fclose(fp);
}// 删除景点函数
void deleteSpot() {
FILE *fp, *fp1;
Spot spot;
char name[50];
int flag = 0;
fp = fopen("spot.txt", "r");
fp1 = fopen("temp.txt", "w");
printf("请输入要删除的景点名称:");
scanf("%s", name);
while (fscanf(fp, "%s %d %d", spot.name, &spot.price, &spot.num) != EOF) {
if (strcmp(name, spot.name) != 0) {
fprintf(fp1, "%s %d %d\n", spot.name, spot.price, spot.num);
} else {
flag = 1;
}
}
fclose(fp);
fclose(fp1);
remove("spot.txt");
rename("temp.txt", "spot.txt");
if (flag == 1) {
printf("景点删除成功!\n");
} else {
printf("景点不存在!\n");
}
}// 显示景点函数
void showSpot() {
FILE *fp;
Spot spot;
fp = fopen("spot.txt", "r");
printf("景点名称\t价格\t数量\n");
while (fscanf(fp, "%s %d %d", spot.name, &spot.price, &spot.num) != EOF) {
printf("%s\t%d\t%d\n", spot.name, spot.price, spot.num);
}
fclose(fp);
}