C语言课程设计——学生信息管理系统(BUG挺多,敬请指正)

来源:互联网 发布:mac怎么更改字体大小 编辑:程序博客网 时间:2024/06/10 02:16

学生信息管理系统(读取文件)

感想:怎么说呢,自己慢慢做了两个周,

代码都是手打的,

也算是对自己曾经选择计算机的一个尊重,

毕竟以后上万行的代码也要练习的。

很水的一个题目,

只怪自己的水平太差劲了......

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 <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <windows.h>#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<i_entry; i++) //判断输入数据的正误,即文件中是否已存在该信息if(strcmp(DATA[i].stuid,DATA[i_entry].stuid)==0) {flag=0;break;}if(flag==1) {printf("请输入学生姓名:");scanf("%s",DATA[i_entry].name);printf("请输入学生年龄:");scanf("%s",DATA[i_entry].age);printf("请输入学生性别:");scanf("%s",DATA[i_entry].gender);printf("请输入学生出生年月日(以/隔开):");scanf("%s",DATA[i_entry].birth);printf("请输入学生联系地址:");scanf("%s",DATA[i_entry].add);printf("请输入学生联系电话:");scanf("%s",DATA[i_entry].tle);printf("请输入学生联系邮箱:");scanf("%s",DATA[i_entry].email);file_save();}if(flag==0)puts("该学号已经存在,如需修改请转到修改命令!");}void Change(int x) {//学生信息的更改提示内容printf("请输入修改后的学生学号:");scanf("%s",DATA[x].stuid);printf("请输入修改后的学生姓名:");scanf("%s",DATA[x].name);printf("请输入修改后的学生年龄:");scanf("%s",DATA[x].age);printf("请输入修改后的学生性别:");scanf("%s",DATA[x].gender);printf("请输入修改后的学生出生年月日(以/隔开):");scanf("%s",DATA[x].birth);printf("请输入修改后的学生联系地址:");scanf("%s",DATA[x].add);printf("请输入修改后的学生联系电话:");scanf("%s",DATA[x].tle);printf("请输入修改后的学生联系邮箱:");scanf("%s",DATA[x].email);puts("数据修改完成!");file_save();}void case5() {//信息更改int flag,i,t;system("cls");puts("***************>>>>>>当前模式为学生信息修改状态<<<<<<*************");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_entry; i++) //判断输入数据的正误if(strcmp(DATA[i].name,DATA[i_entry].name)==0) {flag=1;break;}if(flag==1) {Change(i);}if(flag==0)puts("该姓名不存在,请检查输入是否有误!");}if(t==1) {LIGHT();init();printf("请输入需要修改的学生学号:");scanf("%s",&DATA[i_entry].stuid);GREEN();for(i=0; i<i_entry; i++) //判断输入数据的正误if(strcmp(DATA[i].stuid,DATA[i_entry].stuid)==0) {flag=1;break;}if(flag==1) {Change(i);}if(flag==0)puts("该学号不存在,请检查输入是否有误!");}}void i_printf() {//学生信息的输出int i;printf("学号\t姓名\t年龄\t性别\t出生年/月/日\t联系地址\t联系电话\t联系邮箱");printf("\n");for(i=0; i<i_entry; i++) {printf("%-18s",&DATA[i].stuid);printf("%-16s",DATA[i].name);printf("%-4s",&DATA[i].age);printf("%-6s",DATA[i].gender);printf("%-12s",&DATA[i].birth);printf("%-16s",DATA[i].add);printf("%-16s",DATA[i].tle);printf("%-15s\n",DATA[i].email);}}void case1() {//当键入数字 1 之后的执行情况int flag;flag=1;while(flag) {entry();LIGHT();printf("提示:1,继续录入;0,录入完成.是否继续录入:");GREEN();scanf("%d",&flag);i_entry++;}}void case2() {puts("***************>>>>>>当前模式为学生信息浏览状态<<<<<<*************");i_printf();}void stuid_sort() {//学号排序 冒泡排序算法int r,t;system("cls");puts("***************>>>>>>当前模式以学号排序后浏览状态<<<<<<*************");//struct student temp;for(r=1; r<i_entry; r++) {for(t=0; t<i_entry-r; t++) {if(strcmp(DATA[t+1].stuid, DATA[t].stuid)<0) {//学号由低到高temp=DATA[t+1];DATA[t+1]=DATA[t];DATA[t]=temp;}}}}void name_sort() {//姓名排序 冒泡排序算法int j,k;system("cls");puts("***************>>>>>>当前模式以姓名排序后浏览状态<<<<<<*************");//struct student temp;for(j=1; j<i_entry; j++) {for(k=0; k<i_entry-j; k++) {if(strcmp(DATA[k+1].name,DATA[k].name)<0) {temp=DATA[k+1];DATA[k+1]=DATA[k];DATA[k]=temp;}}}}void case3() {int v;LIGHT();printf("提示:1,按照学号排序;2,按照姓名排序.请键入:");GREEN();scanf("%d",&v);if(v==1) {stuid_sort();i_printf();}if(v==2) {name_sort();i_printf();}}void stuid_find() {//学号查找 利用strcmp()函数int i,flag=0,k;char wqs[MIN_C];k=1;system("cls");puts("***************>>>>>>当前模式以学号查询信息状态<<<<<<*************");while(k) {printf("请键入学生学号: ");scanf("%s",wqs);for(i=0; i<i_entry; i++)if(strcmp(DATA[i].stuid,wqs)==0) {printf("%-18s",&DATA[i].stuid);printf("%-16s",DATA[i].name);printf("%-4s",&DATA[i].age);printf("%-6s",DATA[i].gender);printf("%-12s",&DATA[i].birth);printf("%-16s",DATA[i].add);printf("%-16s",DATA[i].tle);printf("%-15s\n",DATA[i].email);flag=1;}if(flag==0)puts("未查找到该同学信息,如需录入信息请重新键入命令.");LIGHT();puts("请按照文字提示键入命令:");printf("\t\t1.继续查询\n\t\t0.退出查询\n请键入命令:");GREEN();scanf("%d",&k);}}void name_find() {//姓名查找 利用函数strcmp()==0 的特性int i,flag=0,k;char wqs[MIN_C];k=1;system("cls");puts("***************>>>>>>当前模式以姓名查询信息状态<<<<<<*************");while(k) {printf("请键入学生姓名: ");scanf("%s",wqs);for(i=0; i<i_entry; i++)if(strcmp(DATA[i].name,wqs)==0) {printf("%-18s",&DATA[i].stuid);printf("%-16s",DATA[i].name);printf("%-4s",&DATA[i].age);printf("%-6s",DATA[i].gender);printf("%-12s",&DATA[i].birth);printf("%-16s",DATA[i].add);printf("%-16s",DATA[i].tle);printf("%-15s\n",DATA[i].email);flag=1;}if(flag==0)puts("未查找到该同学信息,如需录入信息请重新键入命令.");LIGHT();puts("请按照文字提示键入命令:");printf("\t\t1.继续查询\n\t\t0.退出查询\n请键入命令:");GREEN();scanf("%d",&k);}}void case4() {int v;LIGHT();printf("提示:1,按照学号查询;2,按照姓名查询.请键入:");GREEN();scanf("%d",&v);if(v==1) {stuid_find();}if(v==2) {name_find();}}void deal() {//主要处理函数int k,flag,p;p=1;notice();flag=1;while(flag) {if(p>1)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;}



0 0
原创粉丝点击