第三次博客作业
C语言文件
根据题目要求,我做出了一个可以储存并查询多个学生的相关数据的程序,数据包括一个学生的姓名、学号、性别、所在班级、现代成绩,还设计了一些可以让程序界面比较美观的UI界面,程序的最终效果如下图:
程序初始界面:
按任意键进入应用界面,输入1、2、3将分别转到相应的功能界面,如果输入4,则程序终止:
任务一、二的实现:
选项(1)为学生信息的输入,在输入完一位同学的信息后会提示是否继续添加学生信息,输入1则继续输入,输入0则跳转到应用界面:
输入1时的效果:
在输入学生的数据时,程序会自动生成一个以该学生的姓名为名字的txt文件,其中依次记录有每个学生的学号、性别、班级、线代成绩:
程序的以上部分不仅实现了自动创建一个“姓名.txt”的文件,还实现了向这些文件写入相应数据的目的,顺利的完成了任务一和任务二。
任务三的实现:
在应用界面输入2,对应的功能是显示所有被用户输入的学生的信息:
按任意键返回应用界面,实现将学生信息用结构数组重新读取出来并显示的目的,完成任务三。
$额外功能:
在应用界面输入3,对应查找某个学生单个信息的功能:
输入数字3,系统会提示是否查找,输入1查找,输入0转到应用界面:
任务四的实现:
system函数:
system函数可以发出一个DOS命令,首先来说我在本次作业中使用到的函数, system(“cls”)的作用是可以实现清屏操作, system("pause")的作用是可以冻结屏幕,便于观察程序的运行效果, system(“color”)可以改变命令台的底色和字符颜色,具体用法为:system(“color xy”),x和y分别为窗口的 背景色和前景色,各颜色代码如下:0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色
我在网上又找到了一些system函数的具体实例(图片转自追梦小蚂蚁的CNDS博客):
在我编写的程序中,大量的穿插了 system("cls"),system("pause") ,以及system(“color”)的使用,具体请详见下面展示的此程序的源代码。
程序源代码:
主函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void UI_0(int n);
void UI_1(int n);
void UI_2(int n);
struct student {
int id[30];
char sex[4]; //定义结构数组
int Class[20];
int linear;
};
int main ()
{
system("color f0"); //使用函数改变命令台的底色和字符颜色
int j,i,k,flag=0,mark=0,decide;
char sign;
char stu[100][20],stucp[100][20],stu_dec[20];
struct student students_ip[10],students_op[10];//students_ip做从用户输入中读入数据的数组,students_op做从文件中读入数据的数组
FILE *fp; //定义文件指针
UI_0(0); //加载初始UI
sign=getchar(); //用户输入任意字符继续
system("cls"); //清屏
for(j=0;j=4;)
{
UI_2(1); //加载选择界面
scanf("%d",&j);
system("cls");
if(j==1){
for(i=mark;i<100;i++)
{
system("cls");//清屏
printf("请分别输入:姓名|学号|性别|班级|线代成绩\n");
printf("\t");
scanf("%s",stu[i]); //输入学生姓名
strcpy(stucp[i],stu[i]);
strcat(stu[i],".txt"); //将输入的名字后加上“.txt”
mark++;
if((fp=fopen(stu[i],"w+"))==NULL) //创建以学生名字为标题的txt文件
{
printf("文件打开时遇到错误!\n");
exit (0);
}
scanf("%s",students_ip[i].id); // 输入学生信息到结构数组students_ip
scanf("%s",students_ip[i].sex);
scanf("%s",students_ip[i].Class);
scanf("%d",&students_ip[i].linear);
fprintf(fp,"%s %s %s %d",students_ip[i].id,students_ip[i].sex,students_ip[i].Class,students_ip[i].linear); //将结构数组students_ip中的数据输入姓名.txt文件中
fclose(fp);
printf("==是否继续录入学生信息?==\n \n *是(1) *否(0)\n \n");
scanf("%d",&decide);
if(decide==0)break;
}
for(k=0;k<i+1;k++)
{
if((fp=fopen(stu[k],"r"))==NULL) //打开以学生名字为标题的txt文件
{
printf("文件打开时遇到错误!\n");
break;
}
fscanf(fp,"%s %s %s %d",students_op[k].id,students_op[k].sex,students_op[k].Class,&students_op[k].linear); // 从文件中输入学生信息到结构数组students_op
fclose(fp);
}
}
else if(j==2){
system("cls");//清屏
printf("\t姓名 \t学号 \t性别 \t班级 \t线代分数\n");
for(k=0;k<mark;k++)
printf("\t%s \t%s \t%s \t%s \t%d\n",stucp[k],students_op[k].id,students_op[k].sex,students_op[k].Class,students_op[k].linear); //打印已输入的全部学生信息
system("pause"); //冻结窗口
}
else if(j==3){
printf("==是否需要查找录入某同学的学生信息?==\n \n *是(1) *否(0)\n \n");
scanf("%d",&decide);
if(decide==0){
continue;
}
else{
printf("请输入学生姓名:");
scanf("%s",stu_dec); //接受用户需要查询的学生姓名
for(k=0;k<mark;k++)
{
if(strcmp(stu_dec,stucp[k])==0){
flag=1; //使用循环遍历查找
break;
}
}
if(flag==1){
printf("\t姓名 \t学号 \t性别 \t班级 \t线代分数\n");
printf("\t%s \t%s \t%s \t%s \t%d\n",stucp[k],students_op[k].id,students_op[k].sex,students_op[k].Class,students_op[k].linear); //打印该学生的信息
system("pause");//冻结窗口
}else {
printf("没有此学生的信息!\n"); //此学生的信息不存在,予以提示
system("pause");//冻结窗口
}
}
}else if(j==4)break;
}
UI_1(1);
return 0;
}
其他函数:
void UI_0(int n)
{
int k;
system("color f4");
printf("_________________________________________________学生信息库v1.0Beta版__________________________________________________\n"); //界面
for(k=0;k<15;k++)printf("| |\n");
printf("| 欢迎使用本数据库! |\n") ;
printf("| |\n");
printf("| 按任意键继续··· |\n");
printf("| :( ( )::::: |\n");
printf("| (_, \\ ) ,_):: | | |\n");
printf("| :::-'--`--:::::::: ~~| , \\ _ / |\n");
printf("| __ ::::::::::::::::::: ,|`-._/| -== (_) ==- |\n");
printf("| >(' ) ::::::::^^::::::::.' | /||\\ / \\ |\n");
printf("| )/ ::::::^^::::::::.' | ./ ||`\\ | |\n");
printf("| /( :::::::::::::::/ `-. |/._ || \\ |\n");
printf("| / `----/ ~~=~_~^~ =~ \\~~~~~~~'~~~~'~~~~/~~`` ~=~^~ |\n");
printf("| \\ ~=- / ~^^~~-=~^~ ^ `--------------'~^~=~^~_~^=~^~ |\n");
printf("|_____________________________________________________________________________________________________________________|\n");
}
void UI_1(int n)
{
int k;
for(k=0;k<17;k++)printf("| |\n");
printf("| 感谢您的使用! |\n");
printf("| 祝您生活愉快! |\n");
for(k=0;k<17;k++)printf("| |\n");
system("pause");
}
void UI_2(int n)
{
int k;
printf("|—————————————————————————————————————————————————————————-—|\n");
printf("| ████████████ |\n");
printf("| ██ ◥██◤ ██ |\n");
printf("| ◢███ ◥◤ ██◣ |\n");
printf("| ▊▎██◣ ◢█▊ ▊ |\n");
printf("| ▊▎██◤ ● ● ◥█▊ ▊ |\n");
printf("| ▊ ██ █▊ ▊ |\n");
printf("| ◥▇██ ▊ ▊ █▇◤ |\n");
printf("| ██ ◥▆▄▄▄▆◤ █▊ ◢▇▇◣ |\n");
printf("| ◢██◥◥▆▅▄▂▂▂▄▅▆███◣ ▊◢ █ |\n");
printf("| █ █ ◥◤◢◤ |\n");
printf("| █◣ ________ ◢█ ◢◤ |\n");
printf("| ▊ |程序猿| ▊ ◢◤ |\n");
printf("| ▊ |______| ▊ ◢◤ |\n");
printf("| ▊ × █▇◤ |\n");
printf("| ◢█▇▆▆▆▅▅▅▆▆▆▇█◣ |\n");
printf("| ▊ ▂ ▊ ▊ ▂ ▊ |\n");
printf("| ◥▆▆▆◤ ◥▆▆▆◤ |\n");
printf("| |\n");
printf("| 功能界面 |\n");
printf("| |\n");
printf("| ·学生信息添加(1) ·学生信息一览(2) |\n");
printf("| |\n");
printf("| ·学生信息查询(3) ·退出程序 (4) |\n");
for(k=0;k<4;k++)printf("| |\n");
printf("|_____________________________________________________________________________________________________________________|\n");
}
总结:
收获:通过本次作业,我又把书本上的相关知识阅读了一遍,带着问题去读书果然受益匪浅,无论是对文件的打开和关闭、文件内容的写入和读取,还是关于缓冲区、EOF函数的概念,都有了新的理解。
感受:本次作业看似都是陌生的知识,但是仔细接触后就会发现这些知识十分有趣,会让人停不下来的去试错和研究,我也是在这种心理的驱使下一口气做出了这个程序,并且加了一点私货(指附加功能)。其实通过编写附加程序也是对自己的一种挑战,成功之后就会有很大的成就感,并且在这次的程序中我将界面做成函数分别封装,使自己的主函数看起来很简洁,也是自己在编程中的又一尝试!