c语言编程-编写围棋系统

2023-12-25 14:30

本文主要是介绍c语言编程-编写围棋系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C语言编写围棋系统,不用全局数组和链表 系统功能要求 以菜单的方式完成以下功能,

1.菜单形式如下。 【注意】以下示例均只供参考。

(1)从本地文件导入棋手信息 读取按一定格式存储在本地文件中的信息;本地文件格式可为文本文件或者二进制文件,可自行决定。可参考以下存储格式。

(其中,2表示文件中存储棋手的总人数)

2

P001 连笑 职业 九段 8899

P002 柯洁 职业 九段 9442

(2)保存棋手信息至本地文件 将棋手信息保存至本地文件,并提示保存是否成功。可以存储为文本文件或者二进制文件,请你自己决定。
(3)显示棋手信息 显示所有棋手信息,并注意将各项数据对齐,若无信息,则给出相关提示。
(4)查询棋手信息 提示用户可分别按照棋手身份、棋手姓名、棋手段位进行信息查询,并根据用户提供的选择进行查询结果显示。可以根据自身情况决定是否实现模糊查询功能。

A. 按棋手身份查询

B. 按棋手姓名查询

C. 按棋手段位查询

D. 退出当前功能 请选择(A-D): C

请输入棋手段位: 九段

查询结果如下:

共2人

棋手编号 棋手姓名 棋手身份 棋手段位 等级分

P001 连笑 职业 九段 8899



P002 柯洁 职业 九段 9442

【注意】以下对棋手信息的增、删、改操作都要:

保存到对应的数据文件。

要有操作确认的提示和操作成功的提示。

操作成功后,显示所有棋手信息。

(5)增加棋手信息 提示用户按一定格式输入要增加的一名棋手信息,并提示是否添加成功。
(6)删除棋手信息 提示用户输入棋手编号、姓名,根据输入确定要删除的棋手信息,若没有该棋手信息,则提示查无此人;若有,提示用户是否删除该数据,用户确认删除则删除棋手信息。最后提示相应系统信息。

输入棋手编号、姓名: P004 陈真

完整信息: P004 陈真 业余 2段 80

是否删除该数据y/n?:y

删除成功!

本地文件更新成功!

(7)修改棋手信息 提示用户输入棋手编号、姓名,根据输入确定要修改的修改信息。若没有该棋手信息,则提示查无此人;若有,则先输出该棋手的全部信息,之后询问用户修改哪项信息。用户选择修改项后,提示用户是否要修改。用户若确认修改则修改棋手信息,若放弃修改则退出当前功能。最后提示相应系统信息。

【注意:棋手编号不能更改!】

输入棋手编号、姓名: P001 连笑

完整信息:P001 连笑 职业 九段 8899

选择要修改数据项(1-4):4

是否修改该数据y/n?: y

输入修改信息:8900 修改成功!

本地文件更新成功!

(8)统计棋手信息 提示用户可按照三种方式进行统计:统计某身份某段位棋手总数、统计职业二段以上的棋手总数、统计业余棋手总数。根据输入,输出相应棋手数量和棋手信息。

A. 统计某身份某段位棋手总数

B. 统计职业二段以上的棋手总数

C. 统计业余棋手总数

D. 退出当前功能 请选择(A-D): A

输入棋手身份和段位:职业 九段

当前棋手数量:2

棋手编号 棋手姓名 棋手身份 棋手段位 等级分

P001 连笑 职业 九段 8900

P002 柯洁 职业 九段 9422

(9)对棋手信息进行排序 提示用户可按照两种方式进行排序:对所有棋手按等级分进行降序排序、对职业棋手按段位进行降序排序(等级分或段位相同的棋手按照棋手编号后三位数字大小升序排列)。根据输入信息进行排序,输出排序后的棋手信息。

A. 所有棋手按等级分进行降序排序

B. 职业棋手按段位进行降序排序

C. 退出当前功能 请选择(A-C): B

排序结果:

棋手编号 棋手姓名 棋手身份 棋手段位 等级分

P001 连笑 职业 九段 8900

P002 柯洁 职业 九段 9422

(10)提示用户是否退出该系统,确认后退出系统。
2. 程序设计要求

(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.退出系统 

 

这篇关于c语言编程-编写围棋系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535839

相关文章

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超