前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >记录比赛分数

记录比赛分数

作者头像
大忽悠爱学习
发布于 2021-03-02 07:09:35
发布于 2021-03-02 07:09:35
49800
代码可运行
举报
文章被收录于专栏:c++与qt学习c++与qt学习
运行总次数:0
代码可运行

案例需求:

  1. 欢迎界面
  2. 记录新的比赛分数
  3. 查看往届记录
  4. 清空比赛记录
  5. 退出程序
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#define  FILENAME "score.txt"
//控制台输出位置
//gotoxy只对下面一行的输出语句有用
void gotoxy(int x, int y)
{
	//设置输出位置
	COORD pos = { x,y }; //x行  y列
	//获取控制台输出句柄
	HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
	//设置控制台光标位置
	SetConsoleCursorPosition(output, pos);
}
//隐藏光标
VOID HideConsoleCursor(VOID)
{
	CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),
		&cursor_info);
}
//关闭窗口无效化
VOID KillConsoleCloseButton(VOID) 
{
	DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE),
		SC_CLOSE, MF_DISABLED);
	DrawMenuBar(GetConsoleWindow());
}
//改变窗口的标题
VOID SetTitle(LPCWSTR lpTitle) 
{
	SetConsoleTitle(lpTitle);
}
//开始界面
void Welcome()
{
	gotoxy(45, 6);
	system("color 7C");
	printf("欢迎使用系统\n");
	gotoxy(45, 8);
	printf("1.记录比赛得分\n");
	gotoxy(45, 10);
	printf("2.查看往届记录\n");
	gotoxy(45, 12);
	printf("3.清空比赛记录\n");
	gotoxy(45, 14);
	printf("4.退出当前程序\n");
	HideConsoleCursor();
	KillConsoleCloseButton();
	SetTitle(L"记录比赛分数");
}
//全局变量 记录标志 文件是否为空
int  fileEmpty = 0;//1为真 0为空
//初始化文件为空的标志
void initFlag()
{
	FILE* fp = fopen(FILENAME, "r");
	if (fp == NULL)
	{

		perror("错误信息:");
		system("pause");
		system("cls");
		return;
	}
	//从文件读取一个字符,如果返回值为EOF,则文件为空
	char ch = fgetc(fp);
	if (ch == -1)
	{
		fileEmpty = 1;
	}
	else
	{
		fileEmpty = 0;
	}
}
//记录比赛得分
void getScore();
//查看往届记录
void checkScore();
//清空比赛记录
void clearScore();
int main()
{
	initFlag();
	while (1)
	{
		Welcome();
		//选择
		gotoxy(45, 16);
		printf("请输入选项:\n");
		gotoxy(56, 16);
		int select = 0;
		scanf("%d", &select);
		switch (select)
		{
		case 1:
			getScore();
			break;
		case 2:
			checkScore();
			break;
		case 3:
			clearScore();
			break;
		case 4:
			system("cls");
			printf("欢迎使用!");
			exit(0);
			break;
		default:
			system("cls");
			break;
		}
	}

	system("pause");
	return 0;
}

//记录比赛得分
void getScore()
{
	system("cls");
	printf("请输入比赛得分:\n");
	double score = 0;
	scanf("%lf", &score);
	//放入文件中--用追加的方式写
	FILE* fp = fopen(FILENAME, "a");
	if (!fp)
	{
		perror("出错信息");
		system("pause");
		system("cls");
		return;
	}
	//按格式化的方式写入文件中
	fprintf(fp, "%lf\n", score);
	fclose(fp);
	printf("分数写入成功\n");

	//写入成功后,文件不为空
	fileEmpty = 0;

	system("pause");
	system("cls");
}

//查看往届记录
void checkScore()
{
	if (fileEmpty)
	{
		system("cls");
		printf("文件为空\n");
		system("pause");
		//清屏
		system("cls");
		return;
	}
	system("cls");
	FILE* fp = fopen(FILENAME, "r");
	if (!fp)
	{
		perror("出错信息");
		system("pause");
		system("cls");
		return;
	}
	//格式化方式读取
	int index = 0;
	double Score = 0;
	while (!feof(fp))
	{
		//如果格式化读取时,不把\n读取,光标移至文件结尾有效数据的下一行开头
	   //造成无法读取到有效数据,只能追溯上一次的有效数据,再次录入,造成最后一次数据重复打印


		//解决方案1:格式化读取时,加上\n
		//fscanf(fp, "%lf\n", &Score);


		//解决方案2:利用返回值判断是否读取到有效数据,没有读取到就结束读取
		int ret=fscanf(fp, "%lf", &Score);
		if (ret == EOF)
		{
			break;
		}
		printf("第%d届的分数为%.2lf\n", ++index, Score);
	}
	system("pause");
	system("cls");
}


//清空比赛记录
void clearScore()
{
	if (fileEmpty)
	{
		system("cls");
		printf("文件为空\n");
		system("pause");
		//清屏
		system("cls");
		return;
	}
	system("cls");
	//方法:以写的方式打开文件,如果文件存在则清空文件,文件不存在则创建文件
	printf("确认是否清空?\n");
	printf("1.确认清空\n2.返回\n");
	int select = 0;
	scanf("%d", &select);
	if (select == 1)
	{
		//清空
		FILE* fp = fopen(FILENAME, "w");
		if (fp == NULL)
		{
			perror("出错信息");
			system("pause");
			system("cls");
			return;
		}
		printf("清空文件成功!\n");
		//清空完后,文件为空
		fileEmpty = 1;
	}
	//输入其他值,则返回主界面
	system("pause");
	system("cls");
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验