第三次博客园作业 2019.12.21

C语言文件

一、任务一

你现在拥有一个数组,数组中储存着总共10个人的姓名字符串
你需要为每个人创建一个txt文件,以他们的名字命名。
例如: 生成 笨笨.txt文件

//全局变量
STU student;
STU students[10];
FILE* fp;
char name[10][20] = { "赵一一.txt","钱二二.txt","孙三三.txt","李四四.txt","周五五.txt",
		"吴六六.txt", "郑七七.txt","王八八.txt","冯九九.txt", "卫十十.txt", };
//

定义全局变量,为文件创建提供姓名

void createlist() {
	for (int i = 0; i < 10; i++)fp = fopen(name[i], "w");
}

封装函数,利用循环创建文本。

二、任务二

在任务一的基础上,这次不仅仅要创建txt文件,还需要往文件中写入
每个人的学号,性别,班级,线代成绩

void recordscore() {
	system("pause");
	system("cls");
	printf("\t\t\t\t\t成绩录入界面\t\t\t\t\n\n\n\n");
	char ch;
	while (1) {
		printf("请问是否录入成绩 [Y/N]\n");
		scanf("%c", &ch);
		if (ch == 'N') {
			getchar();
			system("cls"); 
			break;
		}
		else {
			system("cls");
			printf("\t\t\t\t\t成绩录入界面\t\t\t\t\n\n\n\n");
			printf("\t姓名\t\t学号\t\t性别\t\t班级\t\t线代成绩\n\t");
			int num;
			printf("请输入您要录入的编号:\n");
			printf(" 赵一一同学: 编号 0\n");
			printf(" 钱二二同学: 编号 1\n");
			printf(" 孙三三同学: 编号 2\n");
			printf(" 李四四同学: 编号 3\n");
			printf(" 周五五同学: 编号 4\n");
			printf(" 吴六六同学: 编号 5\n");
			printf(" 郑七七同学: 编号 6\n");
			printf(" 王八八同学: 编号 7\n");
			printf(" 冯九九同学: 编号 8\n");
			printf(" 卫十十同学: 编号 9\n\t");
			scanf("%d", &num);
			system("cls");
			printf("\t\t\t\t\t成绩录入界面\t\t\t\t\n\n\n\n");
			printf("\t姓名\t\t学号\t\t性别\t\t班级\t\t线代成绩\n\t");
			fp = fopen(name[num], "w");
			if (fp == NULL) {
				printf("Can't find this document\n");
				exit(0);
			}
			scanf("%s %s %s %s %d", student.name, student.number, student.sex, student._class, &student.score);
			fprintf(fp, "%s %s %s %s %d", student.name, student.number, student.sex, student._class, student.score);
			fclose(fp);
			getchar();
			system("cls");
		}
	}
	menu();
}

封装函数,该函数的功能是首先请用户根据提示是否进行成绩录入,如输入Y则录入,输入N返回主菜单,当用户继续录入时,打印出数据库内拥有的十位同学的名单及编号,根据用户的选择打开对于同学的文本并录入成绩。

三、任务三

在任务二生成的文件中,将每个人的信息再重新读取出来,放入数组中。
[要求使用结构体数组,结构体需要包含姓名,学号,性别,班级,线代成绩5个属性]

void showscore() {
	system("pause");
	system("cls");
	printf("\t\t\t\t\t成绩查询界面\t\t\t\t\n\n\n\n");
	char ch;
	printf("请问是否查看全部成绩 [Y/N]\n");
	ch = getchar();
	if (ch == 'Y') {
		system("cls");
		printf("\t\t\t\t\t成绩查询界面\t\t\t\t\n\n\n\n");
		printf("\t姓名\t\t学号\t\t性别\t\t班级\t\t线代成绩\n");
		for (int i = 0; i < 10; i++) {
			fp = fopen(name[i], "r");
			if (fp == NULL) {
				printf("Can't find this document\n");
				exit(0);
			}
			fscanf(fp, "%s %s %s %s %d", students[i].name, students[i].number, students[i].sex, students[i]._class, &students[i].score);
			printf("\t%s\t%s\t%s\t%s\t%d\n", students[i].name, students[i].number, students[i].sex, students[i]._class, students[i].score);
			fclose(fp);
		}
		getchar();
		system("pause");
		system("cls");
		menu();
	}
	else {
		getchar();
		system("cls");
		menu();
	}
}

四、任务四

试着使用一下system("cls"),system("pause")这两个命令,看看这两个
命令能不能对你的程序起到一些美化的作用。
拓展:上网搜索类似的其他函数,使用并解释他们的作用。
【想找几个是几个】

system("cls"),system("pause")已在任务二、任务三中使用,可以给用户交互的空间,也能让界面更加清爽。

int main()
{
	system("mode con cols=100 lines=40");
	system("color fc");
	createlist();
	menu();
	return 0;
}

system("cls")清除屏幕命令。

system("pause")暂停你的程序,会在按任意键后进行。

system("mode con cols=100 lines=40")根据需要,设计控制台的大小。

system("color fc")根据需要,调整背景与字体颜色。

五、附完整代码

主菜单展示

整体思路是利用graphics库做界面,加强用户体验,在用户点击对应按钮后,会调用不同的函数,通过system(“cls”)的清屏,营造不同界面间切换的效果。

#undef UNICODE
#undef _UNICODE
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void createlist();//创建学生名单
void menu();//主菜单
void recordscore();//成绩录入 
void showscore();//成绩查询
typedef struct student {
	char name[20];
	char number[13];
	char sex[3];
	char _class[10];
	int score;
}STU;
//全局变量
STU student;
STU students[10];
FILE* fp;
char name[10][20] = { "赵一一.txt","钱二二.txt","孙三三.txt","李四四.txt","周五五.txt",
		"吴六六.txt", "郑七七.txt","王八八.txt","冯九九.txt", "卫十十.txt", };
//
int main()
{
	system("mode con cols=100 lines=40");
	system("color fc");
	//createlist();
	menu();
	return 0;
}
void createlist() {
	for (int i = 0; i < 10; i++)fp = fopen(name[i], "w");
}
void menu() {
	initgraph(800, 640);
	//背景设置
	setbkcolor(0xF5F5F5);
	cleardevice();
	settextstyle(40, 20, "仿宋");
	setbkmode(TRANSPARENT);
	settextcolor(0x0000ff);
	setfillcolor(0xCDAA66);
	//
	//标题设置 
	HWND hwnd;
	hwnd = GetHWnd();
	SetWindowText(hwnd, "线代成绩系统");
	//
	//绘制按钮
	fillrectangle(200, 100, 600, 150);
	fillrectangle(200, 250, 600, 300);
	fillrectangle(200, 400, 600, 450);
	outtextxy(320, 105, "成绩录入");
	outtextxy(320, 255, "成绩查询");
	outtextxy(320, 405, "退出系统");
	//鼠标追踪
	MOUSEMSG msg;
	while (true) {
		msg = GetMouseMsg();
		//当鼠标在成绩录入时
		if (msg.x >= 200 && msg.x <= 600 && msg.y >= 100 && msg.y <= 150) {
			setlinecolor(RED);
			rectangle(180, 80, 620, 170);
			if (msg.uMsg == WM_LBUTTONDOWN) {
				closegraph();
				recordscore();
			}
		}
		//当鼠标在成绩查询时
		else if (msg.x >= 200 && msg.x <= 600 && msg.y >= 250 && msg.y <= 300) {
			setlinecolor(RED);
			rectangle(180, 230, 620, 320);
			if (msg.uMsg == WM_LBUTTONDOWN) {
				closegraph();
				showscore();
			}
		}
		//当鼠标在退出系统时
		else if (msg.x >= 200 && msg.x <= 600 && msg.y >= 400 && msg.y <= 450) {
			setlinecolor(RED);
			rectangle(180, 380, 620, 470);
			if (msg.uMsg == WM_LBUTTONDOWN)return;
		}
		else {
			setlinecolor(0xF5F5F5);
			rectangle(180, 80, 620, 170);
			rectangle(180, 230, 620, 320);
			rectangle(180, 380, 620, 470);
		}
	}
}
void recordscore() {
	system("pause");
	system("cls");
	printf("\t\t\t\t\t成绩录入界面\t\t\t\t\n\n\n\n");
	char ch;
	while (1) {
		printf("请问是否录入成绩 [Y/N]\n");
		scanf("%c", &ch);
		if (ch == 'N') {
			getchar();
			system("cls"); 
			break;
		}
		else {
			system("cls");
			printf("\t\t\t\t\t成绩录入界面\t\t\t\t\n\n\n\n");
			printf("\t姓名\t\t学号\t\t性别\t\t班级\t\t线代成绩\n\t");
			int num;
			printf("请输入您要录入的编号:\n");
			printf(" 赵一一同学: 编号 0\n");
			printf(" 钱二二同学: 编号 1\n");
			printf(" 孙三三同学: 编号 2\n");
			printf(" 李四四同学: 编号 3\n");
			printf(" 周五五同学: 编号 4\n");
			printf(" 吴六六同学: 编号 5\n");
			printf(" 郑七七同学: 编号 6\n");
			printf(" 王八八同学: 编号 7\n");
			printf(" 冯九九同学: 编号 8\n");
			printf(" 卫十十同学: 编号 9\n\t");
			scanf("%d", &num);
			system("cls");
			printf("\t\t\t\t\t成绩录入界面\t\t\t\t\n\n\n\n");
			printf("\t姓名\t\t学号\t\t性别\t\t班级\t\t线代成绩\n\t");
			fp = fopen(name[num], "w");
			if (fp == NULL) {
				printf("Can't find this document\n");
				exit(0);
			}
			scanf("%s %s %s %s %d", student.name, student.number, student.sex, student._class, &student.score);
			fprintf(fp, "%s %s %s %s %d", student.name, student.number, student.sex, student._class, student.score);
			fclose(fp);
			getchar();
			system("cls");
		}
	}
	menu();
}
void showscore() {
	system("pause");
	system("cls");
	printf("\t\t\t\t\t成绩查询界面\t\t\t\t\n\n\n\n");
	char ch;
	printf("请问是否查看全部成绩 [Y/N]\n");
	ch = getchar();
	if (ch == 'Y') {
		system("cls");
		printf("\t\t\t\t\t成绩查询界面\t\t\t\t\n\n\n\n");
		printf("\t姓名\t\t学号\t\t性别\t\t班级\t\t线代成绩\n");
		for (int i = 0; i < 10; i++) {
			fp = fopen(name[i], "r");
			if (fp == NULL) {
				printf("Can't find this document\n");
				exit(0);
			}
			fscanf(fp, "%s %s %s %s %d", students[i].name, students[i].number, students[i].sex, students[i]._class, &students[i].score);
			printf("\t%s\t%s\t%s\t%s\t%d\n", students[i].name, students[i].number, students[i].sex, students[i]._class, &students[i].score);
			fclose(fp);
		}
		getchar();
		system("pause");
		system("cls");
		menu();
	}
	else {
		getchar();
		system("cls");
		menu();
	}
}

六、总结

1、system对于控制台真的很好用,尤其是在编写非解题型程序时,很需要考虑用户的体验,这时候,我们就要用上system函数了。

2、界面设计很有趣,利用graphics库可以做出交互性很强的界面,看起来真的很舒服。

posted @ 2019-12-21 18:39  Leesu  阅读(279)  评论(0编辑  收藏  举报