第三次博客园作业 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库可以做出交互性很强的界面,看起来真的很舒服。