C语言学生信息管理系统设计与实现

所属分类: 软件编程 / C 语言 阅读数: 125
收藏 0 赞 0 分享

本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下

#include"stdio.h" //标准的输入输出函数文件头部说明 
#include"math.h"  // 数学函数头部说明 
#include"string.h" 
#include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 
#include"windows.h" //头文件声明,下文用到了改变控制台的宽度和高度 
#define M 100  //宏定义说明 
struct student{ //结构体定义并声明 
 char name[25]; //姓名 
 char num[25]; //学号 
 char credit[20]; //身份证号 
 char native[35]; //籍贯 
 char tel[25]; //手机号 
 int special; //专业 
 int banji; //班级 
 int math,yy,wl,cyy,pe; //数学、英语、物理、C语言、体育 
 double ave;}; //平均分 
//****************************************函数的声明******************************************** 
void input(struct student stu[M]); //输入函数 
void output(struct student stu[M]); //各类用户自定义函数的声明 
void lookfor(struct student stu[M]); //查询函数 
void modify(struct student stu[M]); //修改函数 
void order(struct student stu[M]); //排序函数 
void delete_student(struct student stu[M]); //删除函数 
void xuehao(struct student stu[M]); 
void xingming(struct student stu[M]); 
void fileread(struct student stu[M]); 
void filewrite(struct student stu[M]); 
void yanshi(char *p); //延时函数说明 
//********************************************************************************************** 
int count=0; 
struct student t; 
int main() 
{ 
 int choice,sum; 
 struct student stu[M];  
 system("mode con:cols=400 lines=30000"); //调节控制台的宽度和高度 
 system("color 0b"); //调节控制台的背景和字体颜色 
point1: 
 sum=0; 
 yanshi("\t\t\t\t\t\t\t\t\3\3\3\3\3\3\3\3\3\3\3\3\3欢迎你使用学生信息管理系统\3\3\3\3\3\3\3\3\3\3\n"); 
 do { 
 printf("\t\t\t\t\t\t\t\t-------------------------------------------------\n"); 
 printf("\t\t\t\t\t\t\t\t+ 学生信息管理系统  +\n"); 
 printf("\t\t\t\t\t\t\t\t-------------------------------------------------\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t ***************\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 1、添加学生信息\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 2、浏览学生信息\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 3、查询学生信息\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 4、修改学生信息\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 5、删除学生信息\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 6、排列学生信息\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t 7、读取文件学生\n");   //从文件读取 
 printf("\t\t\t\t\t\t\t\t\t\t 8、保存到文件\n");   //保存到文件 
 printf("\t\t\t\t\t\t\t\t\t\t 9、退出系统\n"); 
 printf("\t\t\t\t\t\t\t\t\t\t ***************\n"); 
 printf("请输入你的选择\n"); 
 scanf("%d",&choice); 
 fflush(stdin); //清除输入缓冲区 
 if (choice>9||choice<=0) 
 { 
 sum++; 
 if (sum>=5) 
 { 
 printf("输入错误次数过多,程序将重新开始\n"); 
 system("pause"); //程序暂停 
 system("cls"); //清屏语句 
 goto point1; 
 } 
 } 
 switch (choice) //根据选择,调用不同的函数来完成不同的任务 
 { 
 case 1:input(stu);break;  
 case 2:output(stu);break; 
 case 3:lookfor(stu);break; 
 case 4:modify(stu);break; 
 case 5:delete_student(stu);break; 
 case 6:order(stu);break; 
 case 7:fileread(stu);break; 
 case 8:filewrite(stu);;break; 
 case 9:printf("感谢你使用学生信息管理系统,请关掉程序!!!\n");system("pause");break; 
 default:printf("无效的选择!!!请重新输入!!!\n");break; 
 } 
 }while (choice!=9); 
 printf("the program is over!!!\n"); 
 return 0; 
} 
void input(struct student stu[M]) //自定义输入函数 
{ 
 int len,size; 
 system("cls"); 
 printf("请添加要输入学生的信息\n"); 
 do { 
 printf("请输入由11位数字组成的学生学号\n"); //do-while循环应用,提示输入位数为一确定数 
 scanf("%s",&stu[count].num); 
 len=strlen(stu[count].num); 
 }while(len!=11); 
 printf("请输入同学的姓名\n"); 
 scanf("%s",stu[count].name); 
 do { 
 printf("请输入由18位数字组成的学生身份证号\n"); //同上 
 scanf("%s",&stu[count].credit); 
 size=strlen(stu[count].credit); 
 }while(size!=18);       
 printf("请输入学生的籍贯\n"); 
 scanf("%s",&stu[count].native); 
 printf("请输入学生的手机号码\n"); 
 scanf("%s",&stu[count].tel); 
 printf("请输入所需要的专业代号:1、计算机科学 2、通信工程 3、网络工程\n"); //采用如此方法解决了专业输入难问题 
 scanf("%d",&stu[count].special); 
 printf("请输入对应的学生班级号码:1、1301 2、1302 \n"); 
 scanf("%d",&stu[count].banji); 
 do { 
 printf("请依次输入不大于100的学生各科成绩\n"); 
 scanf("%d%d%d%d%d",&stu[count].math,&stu[count].yy,&stu[count].wl,&stu[count].cyy,&stu[count].pe); 
 }while(stu[count].math>100||stu[count].yy>100||stu[count].wl>100||stu[count].cyy>100||stu[count].pe>100); //同上同上 
 stu[count].ave=(stu[count].math+stu[count].yy+stu[count].wl+stu[count].cyy+stu[count].pe)/5.0; //求出平均值 
 count++; 
} 
void output(struct student stu[M]) //自定义输出函数 
{ 
 int j; 
 system("cls"); 
 if (count==0) 
 { 
 printf("当前已存学生信息为0个\n"); 
 return; 
 } 
 for (j=0;j<count;j++) 
 { 
 printf("学号\t\t 姓名\t\t身份证号\t籍贯\t手机号\t\t专业\t\t班级\t数学\t英语\t物理\tC语言\t体育\t平均分\n"); 
 for (j=0;j<count;j++){ //for循环控制输出的个数 
 printf("%s\t",stu[j].num); 
 printf("%s\t",stu[j].name); 
 printf("%s\t",stu[j].credit); 
 printf("%s\t",stu[j].native); 
 printf("%s\t",stu[j].tel); 
 if (stu[j].special==1) 
 printf("计算机科学\t"); 
 else if (stu[j].special==2) 
 printf("通信工程\t"); 
 else 
 printf("网络工程\t"); 
 printf("%d\t",stu[j].banji); 
 printf("%d\t",stu[j].math); 
 printf("%d\t",stu[j].yy); 
 printf("%d\t",stu[j].wl); 
 printf("%d\t",stu[j].cyy); 
 printf("%d\t",stu[j].pe); 
 printf("%.1lf\t\n",stu[j].ave);} 
 } 
} 
void lookfor(struct student stu[M])   //自定义查询学生信息函数 
{ 
 int j,flag=0; 
 char xh[25]; 
 system("cls"); 
 if (count==0) 
 { 
 printf("当前已存学生信息为0个,无法查询!!!\n"); 
 return; 
 } 
 else 
 { 
 printf("请输入你想要查看的同学学号\n"); 
 scanf("%s",&xh); 
 fflush(stdin); 
 for (j=0;j<count;j++) 
 { 
 if (strcmp(stu[j].num,xh)==0) //通过字符函数对已存入的学生信息进行比较,找出要查看的学生 
 { 
 printf("学号\t\t姓名\t\t身份证号\t籍贯\t手机号\t\t专业\t\t班级\t数学\t英语\t物理\tC语言\t体育\t平均分\n"); 
 printf("%s\t",stu[j].num); 
 printf("%s\t",stu[j].name); 
 printf("%s\t",stu[j].credit); 
 printf("%s\t",stu[j].native); 
 printf("%s\t",stu[j].tel); 
 if (stu[j].special==1) 
 printf("计算机科学\t"); 
 else if (stu[j].special==2) 
 printf("通信工程\t"); 
 else 
 printf("网络工程\t"); 
 printf("%d\t",stu[j].banji); //考虑一个对齐的因数 
 printf("%d\t",stu[j].math); 
 printf("%d\t",stu[j].yy); 
 printf("%d\t",stu[j].wl); 
 printf("%d\t",stu[j].cyy); 
 printf("%d\t",stu[j].pe); 
 printf("%.1lf\t",stu[j].ave); 
 } 
 } 
 if (j==count) 
 printf("很抱歉,没有你所需要的学生信息\n"); 
 } 
} 
void modify(struct student stu[M]) //自定义修改函数 
{ 
 int j,flag=0,course; 
 char xh[25]; 
 system("cls"); 
 if (count==0) 
 { 
 printf("当前已存学生信息为0个,无法修改!!!\n"); 
 return; 
 } 
 else 
 { 
 printf("请输入你想要修改的同学学号\n"); 
 scanf("%s",&xh); 
 fflush(stdin); 
 for (j=0;j<count;j++) 
 if (strcmp(stu[j].num,xh)==0) //同上 
 { 
 printf("你确定要修改学生的信息吗???如果不确定的话,请关掉本程序吧!!!\n"); 
 printf("选择课程: 1、数学 2、英语 3、物理 4、C语言 5、体育\n"); 
 scanf("%d",&course); 
 printf("请输入你想要修改后的学生成绩\n"); 
 switch(course) 
 { 
 case 1:scanf("%d",&stu[j].math);break; 
 case 2:scanf("%d",&stu[j].yy);break; //switch控制语句 
 case 3:scanf("%d",&stu[j].wl);break; 
 case 4:scanf("%d",&stu[j].cyy);break; 
 case 5:scanf("%d",&stu[j].pe);break; 
 default:printf("无效的选择!!!请重新输入!!!\n");break; 
 } 
 } 
 } 
} 
void delete_student(struct student stu[M]) //自定义删除函数 
{ 
 int choice; 
 system("cls"); 
 if (count==0) 
 { 
 printf("当前已存学生信息为0个,无法删除!!!\n"); 
 return; 
 } 
 else 
 { 
 printf("请选择你所要删除的方式:1、学号 2、姓名(如果你的姓名是中文,那么无法删除,请选择学号删除) 3、取消\n"); 
 scanf("%d",&choice); 
 switch(choice)  //switch语句对用户要删除的方式进行选择 
 { 
 case 3:return;break; 
 case 2:xingming(stu);break;  //用户自定义函数之间的套用 
 case 1:xuehao(stu);break; 
 default:printf("无效的选择!!!请重新输入!!!\n");break; 
 } 
 } 
} 
void order(struct student stu[M]) //排序函数的定义 
{ 
 int j,k,choice,index; 
 system("cls"); 
 printf("请输入你想要进行排序的方式(所有排序的方式均是降序)!!!\n"); 
 printf("1、数学 2、英语 3、物理 4、C语言 5、体育 6、平均分\n"); 
 scanf("%d",&choice); 
 switch (choice) 
 { 
 case 1:for (j=0;j<count;j++) 
 { index=j; 
 for (k=j+1;k<count;k++) 
 if (stu[k].math>stu[index].math) 
 {t=stu[k];stu[k]=stu[index];stu[index]=t;} 
 };break; 
 case 2:for (j=0;j<count;j++) 
 { index=j; 
 for (k=j+1;k<count;k++) 
 if (stu[k].yy>stu[index].yy) 
 {stu[k]=stu[index];}    //整个为排序部分,采用了所谓的选择排序的方法 
 };break; 
 case 3:for (j=0;j<count;j++) 
 { index=j; 
 for (k=j+1;k<count;k++) 
 if (stu[k].wl>stu[index].wl) 
 {t=stu[k];stu[k]=stu[index];stu[index]=t;} 
 };break; 
 case 4:for (j=0;j<count;j++) 
 { index=j; 
 for (k=j+1;k<count;k++) 
 if (stu[k].cyy>stu[index].cyy) 
 {t=stu[k];stu[k]=stu[index];stu[index]=t;} 
 };break; 
 case 5:for (j=0;j<count;j++) 
 { index=j; 
 for (k=j+1;k<count;k++) 
 if (stu[k].pe>stu[index].pe) 
 {t=stu[k];stu[k]=stu[index];stu[index]=t;} 
 };break; 
 case 6:for (j=0;j<count;j++) 
 { index=j; 
 for (k=j+1;k<count;k++) 
 if (stu[k].ave>stu[index].ave) 
 {t=stu[k];stu[k]=stu[index];stu[index]=t;} //强制类型转换符号只能用于有操作数,根据赋值运算中的类型转换问题可知 
 };break; 
 default:printf("无效的选择!!!请重新输入!!!\n");break; 
 } 
} 
void xuehao(struct student stu[M])  //自定义通过学号方式删除学生信息函数 
{ 
 int j,index=0,k=count; 
 char xh[25]; 
 system("cls"); 
 printf("请输入你想要删除的同学学号\n"); 
 scanf("%s",xh); 
 fflush(stdin); 
 for (j=0;j<count;j++) 
 { if (strcmp(stu[j].num,xh)==0) 
 { 
 for (j=index;j<count;j++) 
 stu[j]=stu[j+1]; 
 count--; 
 if (count<k) 
 printf("你已经删除成功\n"); 
 } 
 index++;} 
 if (j==count) 
 printf("抱歉!!!没有你所需要删除的学生信息!*_*!\n"); 
} 
void xingming(struct student stu[M])  //自定义通过姓名方式删除学生信息函数 
{ 
 int flag=0,j,k=count; 
 char xm[25]; 
 system("cls"); 
 printf("请输入你想要删除的同学姓名\n"); 
 scanf("%s",xm); 
 fflush(stdin); 
 for (j=0;j<count;j++) 
 { 
 if (strcmp(stu[j].num,xm)==0) 
 { 
 
 for (j=flag-1;j<count;j++)  
 stu[j]=stu[j+1]; 
 count--; 
 if (count<k) 
 printf("你已经删除成功\n"); 
 } 
 flag++;} 
 if (j==count) 
 printf("抱歉!!!没有你所需要删除的学生信息!*_*!\n"); 
} 
void yanshi(char *p)  //延时函数的定义 
{ 
 while (1) 
 { 
 if (*p!=0) 
 printf("%c",*p++); 
 else 
 break; 
 Sleep(100);  //延时控制间断语句 
 } 
} 
void filewrite(struct student stu[M])   //写入文件函数定义 
{ 
 int j=0; 
 char c; 
 FILE *fp; 
 printf("请选择是否要存入已输入的学生信息:'y'还是'n'???\n"); 
 scanf("%c",&c); 
 fflush(stdin); 
 while(c!='y'&&c!='n'){ 
 if (c!='y'&&c!='n') 
 printf("输入错误,请重新输入\n"); 
 printf("以下操作将会覆盖已存储的数据,确定请输入'y'或'n'???\n"); 
 scanf("%c",&c); 
 fflush(stdin); 
 } 
 if (c=='y') 
 { 
 if((fp=fopen("d:\\stu.dat","wb"))==NULL) 
 { 
 printf("文件打开错误,程序无法进行\n"); 
 exit(0); 
 } 
 for(j=0;j<count;j++) 
 {fwrite(&stu[j],sizeof(struct student),1,fp); 
 } 
 fclose(fp); 
 if(count==0) 
 printf("没有文件,无法保存\n"); 
 else 
 printf("数据存储完毕\n"); 
 system("pause"); 
 } 
 else 
 return; 
} 
void fileread(struct student stu[M])   //读取文件信息函数定义 
{ 
 int j=0; 
 char c; 
 FILE *fp; 
 system("cls"); 
 printf("请选择是否要存入已输入的学生信息:'y'还是'n'???\n"); 
 scanf("%c",&c); 
 fflush(stdin); 
 while(c!='y'&&c!='n'){ 
 if (c!='y'&&c!='n') 
 printf("输入错误,请重新输入\n"); 
 printf("以下操作将会覆盖已存储的数据,确定请输入'y'或'n'???\n"); 
 scanf("%c",&c); 
 fflush(stdin); 
 } 
 if (c=='y') 
 { 
 if((fp=fopen("d:\\stu.dat","rb"))==NULL) 
 { 
 printf("文件打开错误,程序无法进行\n"); 
 exit(0); 
 } 
 fread(&stu[j],sizeof(struct student),1,fp); 
 count=0; 
 count++; 
 j++; 
 while(fread(&stu[j],sizeof(struct student),1,fp)) 
 { 
 j++; 
 count++; 
 } 
 fclose(fp); 
 printf("数据读取完毕!!!\n"); 
 system("pause"); 
 } 
 else 
 return; 
}

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

用标准c++实现string与各种类型之间的转换

这个类在头文件中定义, < sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本
收藏 0 赞 0 分享

C++如何通过ostringstream实现任意类型转string

再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
收藏 0 赞 0 分享

C/C++指针小结

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
收藏 0 赞 0 分享

C++ 类的静态成员深入解析

在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
收藏 0 赞 0 分享

C++类的静态成员初始化详细讲解

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
收藏 0 赞 0 分享

C++类静态成员与类静态成员函数详解

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值
收藏 0 赞 0 分享

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
收藏 0 赞 0 分享

static全局变量与普通的全局变量的区别详细解析

以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

C++ explicit关键字的应用方法详细讲解

C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
收藏 0 赞 0 分享

教你5分钟轻松搞定内存字节对齐

随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
收藏 0 赞 0 分享
查看更多