学生信息管理系统(读取文件)
感想:怎么说呢,自己慢慢做了两个周,
代码都是手打的,
也算是对自己曾经选择计算机的一个尊重,
毕竟以后上万行的代码也要练习的。
很水的一个题目,
只怪自己的水平太差劲了......
1. 设计目的
1.1巩固和加深对C语言课程基本知识的理解和掌握
1.2利用C语言进行基本的软件设计与开发
1.3了解部分管理信息系统的开发流程
1.4加强自己的团队协作和分析问题的能力
1.5掌握C语言编程和程序调试的基本技能
1.6熟悉编译器的基本操作与对错误警告的理解和改正
1.7提高运用C语言解决实际问题的能力
1.8掌握书写程序设计说明文档的能力
2. 功能描述
2.1人性化的分级菜单操作界面
2.2可录入信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail
2.3学生信息可以进行综合浏览,或者自定义排序方式浏览
2.4以菜单的形式对学生的信息进行录入,并可以写入文件
2.5屏幕显示区域不同操作有不同的字体颜色
2.6对已存在的信息进行多次更改,但是没有完成对已存在信息的删除操作
3. 总体设计
3.1选题构思过程
选择学生信息管理系统这个题目后,并不是着急的去敲代码,而是对自己的思路首先有一个框图构架,选择用什么函数,哪些函数需要自己自定义实现,以及对代码的简化等,这一步真的是最不简单的,毕竟第一次没有任何经验与思路。除此之外,我个人的基础还不是很好,如指针与链表,文件等内容。
3.2用到的知识
自定义函数;文件的写入与读取;结构体;冒泡排序算法;控制台操作(百度);全局与局部变量的设定;对程序的注释等。
运行效果:
代码:
/******************************************************************************************************
题目三:学生信息管理系统设计
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
试设计一学生信息管理系统,使之能提供以下功能:
系统以菜单方式工作
学生信息录入功能(学生信息用文件保存)---输入
学生信息浏览功能---输出
查询、排序功能---算法
按学号查询
按姓名查询
学生信息的删除与修改(可选项)
********************************************************************************************************/
#include
#include
#include
#include
#include
#define MIN_C 100//每个数据对应字符串类型占据的大小
#define MAX_G 1000//学生信息量大小
int i_entry;//学生的人数统计
FILE *fp;//文件指针
struct student {
char stuid[MIN_C];//学生学号
char name[MIN_C];//学生姓名
char age[3];//学生年龄
char gender[MIN_C];//学生性别
char birth[MIN_C];//学生出生日期
char add[MIN_C];//学生地址
char tle[MIN_C];//学生电话
char email[MIN_C];//学生邮箱
} DATA[MAX_G];
struct student temp;//用于排序的中间变量
void init() {//文件的初始化读取
while (!feof(fp)) {
fscanf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", DATA[i_entry].stuid, DATA[i_entry].name, DATA[i_entry].age,
DATA[i_entry].gender, DATA[i_entry].birth, DATA[i_entry].add, DATA[i_entry].tle, DATA[i_entry].email);
i_entry++;
}
}
void file_save() {//信息以文件格式录入函数
fprintf(fp, "%s\t\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", DATA[i_entry].stuid, DATA[i_entry].name,DATA[i_entry].age,
DATA[i_entry].gender, DATA[i_entry].birth, DATA[i_entry].add, DATA[i_entry].tle, DATA[i_entry].email);
}
void RED() {//控制台调整前景色为红色
HANDLE kai_1 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(kai_1, FOREGROUND_INTENSITY | FOREGROUND_RED); // 为红色
}
void GREEN() {//控制台调整前景色为绿色
HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_GREEN);// 为绿色
}
void LIGHT() {//控制台调整前景色为强光
HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);// 为强光
}
void notice() {//提示信息
RED();
puts("\t\t\t1.学生综合信息录入");
puts("\t\t\t2.学生综合信息浏览");
puts("\t\t\t3.综合信息排序浏览");
puts("\t\t\t4.学生个人信息查询");
puts("\t\t\t5.学生综合信息修改");
printf("\t\t\t0. 退 出 系 统\n");
GREEN();
printf("请键入:");
}
void entry() {//学生信息的录入
int flag,i;
system("cls");
init();
flag=1;
puts("***************>>>>>>当前模式为学生信息录入状态<<<<<<*************");
printf("请输入学生学号:");
flag=1;//标识变量,用以判断该信息是否已存在
scanf("%s",&DATA[i_entry].stuid);
for(i=0; i>>>>>当前模式为学生信息修改状态<<<<<<*************");
LIGHT();
printf("选定检索方式:1.学号检索\t2.姓名检索. 请键入:");
GREEN();
flag=0;
scanf("%d",&t);
if(t==2) {
init();
LIGHT();
printf("请输入需要修改的学生姓名:");
scanf("%s",&DATA[i_entry].name);
GREEN();
for(i=0; i>>>>>当前模式为学生信息浏览状态<<<<<<*************");
i_printf();
}
void stuid_sort() {//学号排序 冒泡排序算法
int r,t;
system("cls");
puts("***************>>>>>>当前模式以学号排序后浏览状态<<<<<<*************");
//struct student temp;
for(r=1; r>>>>>当前模式以姓名排序后浏览状态<<<<<<*************");
//struct student temp;
for(j=1; j>>>>>当前模式以学号查询信息状态<<<<<<*************");
while(k) {
printf("请键入学生学号: ");
scanf("%s",wqs);
for(i=0; i>>>>>当前模式以姓名查询信息状态<<<<<<*************");
while(k) {
printf("请键入学生姓名: ");
scanf("%s",wqs);
for(i=0; i1)
notice();
scanf("%d",&k);
system("cls");
switch(k) {
case 0: {
puts("温馨提醒:");
puts("\t ^…………^……^^谢谢您的支持,欢迎再次使用!^^……^…………^ ");
puts("\t*******学生基本信息已保存在当前目录文件 student_data.txt 下********");
flag=0;
LIGHT();
break;
}
case 1: {
case1();
break;
}
case 2: {
case2();
break;
}
case 3: {
case3();
break;
}
case 4: {
case4();
break;
}
case 5: {
case5();
break;
}
default: {
RED();
printf("请正确键入命令前数字!\n");
GREEN();
break;
}
}
p=1103;
puts("\n");
}
}
int main() {
if ((fp = fopen("student_data.txt", "r+")) == NULL) {
fp = fopen("student_data.txt", "w+");
}
init();//文件的初始化读入
GREEN();//控制台颜色为绿色
printf(" >************欢 迎 您 使 用 学 生 信 息 管 理 系 统(正式版1.0.1)************<\n");
printf(">************* 请键入以下命令行所对应的数字进行操作: *************<\n");
printf(">************* 请确定正确退出程序,否则文件将不被正常保存. *************<\n");
deal();//处理数据
fclose(fp);//文件正常关闭
return 0;
}