C语言编写围棋系统,不用全局数组和链表 系统功能要求 以菜单的方式完成以下功能,
(其中,2表示文件中存储棋手的总人数)
2
P001 连笑 职业 九段 8899
P002 柯洁 职业 九段 9442
A. 按棋手身份查询
B. 按棋手姓名查询
C. 按棋手段位查询
D. 退出当前功能 请选择(A-D): C
请输入棋手段位: 九段
查询结果如下:
共2人
棋手编号 棋手姓名 棋手身份 棋手段位 等级分
P001 连笑 职业 九段 8899
P002 柯洁 职业 九段 9442
【注意】以下对棋手信息的增、删、改操作都要:
保存到对应的数据文件。
要有操作确认的提示和操作成功的提示。
操作成功后,显示所有棋手信息。
输入棋手编号、姓名: P004 陈真
完整信息: P004 陈真 业余 2段 80
是否删除该数据y/n?:y
删除成功!
本地文件更新成功!
【注意:棋手编号不能更改!】
输入棋手编号、姓名: P001 连笑
完整信息:P001 连笑 职业 九段 8899
选择要修改数据项(1-4):4
是否修改该数据y/n?: y
输入修改信息:8900 修改成功!
本地文件更新成功!
A. 统计某身份某段位棋手总数
B. 统计职业二段以上的棋手总数
C. 统计业余棋手总数
D. 退出当前功能 请选择(A-D): A
输入棋手身份和段位:职业 九段
当前棋手数量:2
棋手编号 棋手姓名 棋手身份 棋手段位 等级分
P001 连笑 职业 九段 8900
P002 柯洁 职业 九段 9422
A. 所有棋手按等级分进行降序排序
B. 职业棋手按段位进行降序排序
C. 退出当前功能 请选择(A-C): B
排序结果:
棋手编号 棋手姓名 棋手身份 棋手段位 等级分
P001 连笑 职业 九段 8900
P002 柯洁 职业 九段 9422
(1)要合理使用数据结构,包括数组、枚举、结构体等。
(2)逻辑独立的功能定义在函数中,并利用指针进行参数传递。
(3)要有合理提示,例如修改、删除需提示确认。
(4)考虑程序鲁棒性,对不合法数据要有错误处理机制。
(5)所有数据保存在文件中。
要实现一个围棋棋手管理系统,需要定义一个棋手信息的结构体,然后根据功能需求实现各种操作。下面是一个C语言实现方案。这个方案基于文本文件作为数据存储,涵盖了基本的数据读取、保存、显示、查询、增加、删除、修改、统计和排序功能。
定义棋手信息结构体:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_PLAYERS 100typedef struct {char id[10];char name[50];char type[10]; // 职业或业余char rank[10]; // 段位int score; // 等级分
} Player;
主菜单函数和各功能函数原型:
void importPlayers(Player players[], int *count);
void savePlayers(const Player players[], int count);
void showPlayers(const Player players[], int count);
void addPlayer(Player players[], int *count);
void deletePlayer(Player players[], int *count);
void modifyPlayer(Player players[], int count);
void searchPlayers(const Player players[], int count);
void sortPlayers(Player players[], int count);
void statsPlayers(const Player players[], int count);
int menu();int main() {Player players[MAX_PLAYERS];int count = 0;int choice;char exitConfirm;while (1) {choice = menu();switch (choice) {case 1:importPlayers(players, &count);break;case 2:savePlayers(players, count);break;case 3:showPlayers(players, count);break;case 4:addPlayer(players, &count);break;case 5:deletePlayer(players, &count);break;case 6:modifyPlayer(players, count);break;case 7:searchPlayers(players, count);break;case 8:sortPlayers(players, count);break;case 9:statsPlayers(players, count);break;case 10:printf("您确定要退出系统吗?(y/n): ");scanf(" %c", &exitConfirm); // 读取用户输入,注意前面的空格字符if (exitConfirm == 'y' || exitConfirm == 'Y') {printf("感谢使用,再见!n");return 0; // 退出程序}break; // 如果用户选择不退出,继续显示菜单default:printf("无效选项,请重新选择。n");}}return 0; // 程序正常退出
}
基本功能实现:
从本地文件导入棋手信息: 读取文件,解析数据,填充到Player数组。
保存棋手信息至本地文件: 遍历Player数组,将数据格式化写入文件。
显示棋手信息: 遍历Player数组,打印每个棋手的信息。
查询棋手信息: 提供多种查询方式,根据输入的条件在Player数组中查找匹配项并显示。
增加棋手信息: 读取用户输入的棋手信息,添加到Player数组。
删除棋手信息: 根据用户输入的条件,在Player数组中查找并删除匹配的棋手。
修改棋手信息: 根据用户输入,找到特定的棋手并允许用户修改信息。
统计棋手信息: 根据用户选择的统计方式,对Player数组中的数据进行统计。
对棋手信息进行排序: 根据用户选择的排序方式,对Player数组中的数据进行排序。
数据文件格式: 文本文件格式可以如下所示,每行代表一个棋手的信息,项目之间用空格分隔:
P001 连笑 职业 九段 8899
P002 柯洁 职业 九段 9442
错误处理和用户提示: 每个功能中都应包含对错误输入的处理和对用户的适当提示。
程序的鲁棒性: 在处理用户输入和文件操作时要检查可能的错误,如文件不存在、输入格式不正确等。
运行结果:
1.从本地文件导入棋手信息
2.见4
3.显示棋手信息
4.增加棋手信息 和保存信息至本地文件
5.删除棋手信息
6.修改棋手信息
7.查询棋手信息
8.对棋手信息进行排序
9.统计棋手信息
10.退出系统
本文发布于:2024-02-01 10:34:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170675487736014.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |