学生信息管理系统
Posted 南笙一梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学生信息管理系统相关的知识,希望对你有一定的参考价值。
/*
* Copyright (c) 2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:main.cpp
* 作 者:赵志君
* 完成时间:2016年6月30日
* 版 本 号:v1.0
*
* 问题描述:学生信息管理系统
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
#define N 50 //数据量
int m = 0;
struct Student ///结构体
int number; //学号 结构: 年纪-班级-编号
char name[20]; //姓名
int age; //年龄
char sex; //性别
char birthday[20]; //出生日期
char address[20]; //地址
char tel[20]; //电话
char eMail[20]; //E-mail
stu[N];
void sift(int *grade,int *classGrade,int *number) ///拆分学号
for(int j=0;j<m;j++)
int temp=stu[j].number,t=0;
for(int i=0;i<8;i++) //学号倒置
t=temp%10+t*10;
temp=temp/10;
//分离出年级
grade[j]=0;
for(int i=0;i<4;i++)
grade[j]=grade[j]*10+t%10;
t=t/10;
//分离出班级
classGrade[j]=0;
for(int i=0;i<2;i++)
classGrade[j]=classGrade[j]*10+t%10;
t=t/10;
//分离出编号
number[j]=0;
for(int i=0;i<2;i++)
number[j]=number[j]*10+t%10;
t=t/10;
void rank_information() ///信息按学号进行排序
Student temp;
for(int i=0; i<m-1; i++)
for(int j=i+1; j<m; j++)
if(stu[i].number>stu[j].number)
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
void showInfo(int i) ///信息显示
printf("\\n学号:%7d 姓名:%s\\n",stu[i].number,stu[i].name);
printf("年龄:%-7d 性别:%c\\n",stu[i].age,stu[i].sex);
printf("出生日期:%s\\n",stu[i].birthday);
printf("地址:%s\\n",stu[i].address);
printf("电话:%s\\n",stu[i].tel);
printf("E-mail:%s\\n",stu[i].eMail);
void save() ///信息写入文件 先排序 后写入
rank_information(); //排序
ofstream outfile("Student.txt");
for(int i=0; i<m; i++)
outfile<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].sex
<<" "<<stu[i].birthday<<" "<<stu[i].address<<" "<<stu[i].tel<<" "<<stu[i].eMail;
if(i!=m-1)
outfile<<endl;
if(m==0)
break;
outfile.close();
void input_information() ///信息录入
printf("注:学号必须输入,没有的信息请用“ 0 ”替代。\\n");
printf("请输入要录入的学生信息\\n 学号 姓名 年龄 性别 出生日期 地址 电话 E-mail\\n");
scanf("%d %s %d %c %s %s %s %s",&stu[m].number,stu[m].name,&stu[m].age,&stu[m].sex,
stu[m].birthday,stu[m].address,stu[m].tel,stu[m].eMail);
if(m==0)
m++;
save();
printf("信息写入文件成功!\\n");
printf("输入任意键继续:");
getch();
return;
for(int i=0; i<m; i++)
if(stu[i].number==stu[m].number)
printf("此学生已存在,请确认信息后再录入!\\n");
return;
else if(i==m-1)
m++;
save();
printf("信息写入文件成功!\\n");
printf("输入任意键继续:");
getch();
return;
void showInformation() ///筛选查询信息
int n,a,k1,k2,k3;
char ch[2],c,dizhi[10];
while(1)
system("cls");
printf("\\n\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t********* 1.学号筛选 4.性别筛选 *********\\n");
printf("\\t\\t\\t********* 2.姓名筛选 5.地址筛选 *********\\n");
printf("\\t\\t\\t********* 3.年龄筛选 6.全部显示 *********\\n");
printf("\\t\\t\\t********* 0.退出 *********\\n");
printf("\\t\\t\\t***************************************************************\\n");
printf("请输入您要筛选的方式:");
while(1)
scanf("%d",&n);
fflush(stdin); //防输错
if(n>=0 && n<=7)
break;
printf("输入有误,请重新输入筛选方式:");
switch(n)
case 0:
return;
case 1:
system("cls");
printf("\\n\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t********* 1.年级 5.年级+编号 *********\\n");
printf("\\t\\t\\t********* 2.班级 6.年级+班级+编号 *********\\n");
printf("\\t\\t\\t********* 3.编号 7.范围筛选 *********\\n");
printf("\\t\\t\\t********* 4.年级+班级 0.退出 *********\\n");
printf("\\t\\t\\t***************************************************************\\n");
printf("请输入您要筛选的方式:");
while(1)
scanf("%d",&a);
fflush(stdin); //防输错
if(n>=0 && n<=7)
break;
printf("输入有误,请重新输入筛选方式:");
int grade[N],classGrade[N],number[N];
sift(grade,classGrade,number);
switch(a)
case 0:
break;
case 1:
printf("请输入您要筛选的年级:");
scanf("%d",&k1);
for(int i=0; i<m; i++)
if(grade[i]==k1)
showInfo(i);
break;
case 2:
printf("请输入您要筛选的班级:");
scanf("%d",&k1);
for(int i=0; i<m; i++)
if(classGrade[i]==k1)
showInfo(i);
break;
case 3:
printf("请输入您要筛选的编号:");
scanf("%d",&k1);
for(int i=0; i<m; i++)
if(number[i]==k1)
showInfo(i);
break;
case 4:
printf("请输入您要筛选的年级和班级:");
scanf("%d%d",&k1,&k2);
for(int i=0; i<m; i++)
if(grade[i]==k1 && classGrade[i]==k2)
showInfo(i);
break;
case 5:
printf("请输入您要筛选的年级和编号:");
scanf("%d%d",&k1,&k2);
for(int i=0; i<m; i++)
if(grade[i]==k1 && number[i]==k2)
showInfo(i);
break;
case 6:
printf("请输入您要筛选的年级、班级和编号:");
scanf("%d%d%d",&k1,&k2,&k3);
for(int i=0; i<m; i++)
if(grade[i]==k1 && classGrade[i]==k2 && number[i]==k3)
showInfo(i);
break;
case 7:
printf("请输入您要筛选的范围(a<b):");
scanf("%d%d",&k1,&k2);
for(int i=0; i<m; i++)
if(stu[i].number>=k1 && stu[i].number<=k2)
showInfo(i);
break;
default:
printf("指令错误!");
break;
case 2:
char ch[2];
printf("请输入您要筛选的姓氏:");
cin>>ch;
for(int i=0; i<m; i++)
if(ch[0]==stu[i].name[0] && ch[1]==stu[i].name[1])
showInfo(i);
break;
case 3:
system("cls");
printf("\\n\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t********* 1.具体年龄 2.年龄范围 *********\\n");
printf("\\t\\t\\t***************************************************************\\n");
printf("请输入您要筛选类型:");
scanf("%d",&k1);
if(k1==1)
printf("请输入您要筛选的年龄:");
scanf("%d",&k2);
for(int i=0; i<m; i++)
if(k2==stu[i].age)
showInfo(i);
else if(k1==2)
printf("请输入您要筛选的年龄范围(a<b):");
scanf("%d%d",&k2,&k3);
for(int i=0; i<m; i++)
if(stu[i].age>=k2 && stu[i].age<=k3)
showInfo(i);
break;
case 4:
printf("请输入您要筛选的性别:");
scanf("%c",&c);
for(int i=0; i<m; i++)
if(c==stu[i].sex)
showInfo(i);
break;
case 5:
printf("请输入您要筛选的地址:");
cin>>dizhi;
for(int i=0; i<m; i++)
if(!strcmp(dizhi,stu[i].address))
showInfo(i);
break;
case 6:
for(int i=0; i<m; i++)
showInfo(i);
break;
printf("输入任意键继续:");
getch();
void query() ///精准查询信息
int k,num;
char nam[20];
if(m>0)
system("cls");
printf("\\n\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t********* 1.按学号查询 4.按邮箱查询 *********\\n");
printf("\\t\\t\\t********* 2.按姓名查询 0.退出 *********\\n");
printf("\\t\\t\\t********* 3.按电话查询 *********\\n");
printf("\\t\\t\\t***************************************************************\\n");
printf("请输入指令:");
while(1)
scanf("%d",&k);
fflush(stdin); //防输错
if(k>=0 && k<=4)
break;
printf("输入指令有误,请重新输入指令:");
while(1)
if(k==0)
return;
else if(k==1) //按学号查询学生信息
printf("请输入要查询的学号:");
scanf("%d",&num);
if(num==0)
return;
for(int i=0; i<m; i++)
if(stu[i].number==num)
showInfo(i);
printf("输入任意键继续:");
getch();
return;
else if(i==m-1)
printf("未查到该学生信息!\\n");
else if(k==2) //按姓名查询学生信息
printf("请输入要查询的学生姓名:");
scanf("%s",nam);
if(nam[0]=='0')
return;
for(int i=0; i<m; i++)
if(!strcmp(nam,stu[i].name))
showInfo(i);
printf("输入任意键继续:");
getch();
return;
else if(i==m-1)
printf("未查到该学生信息\\n");
else if(k==3) //按电话查询学生信息
printf("请输入要查询的学生电话:");
scanf("%s",nam);
if(nam[0]=='0')
return;
for(int i=0; i<m; i++)
if(!strcmp(nam,stu[i].tel))
showInfo(i);
printf("输入任意键继续:");
getch();
return;
else if(i==m-1)
printf("未查到该学生信息\\n");
else if(k==4) //按邮箱查询学生信息
printf("请输入要查询的学生邮箱:");
scanf("%s",nam);
if(nam[0]=='0')
return;
for(int i=0; i<m; i++)
if(!strcmp(nam,stu[i].eMail))
showInfo(i);
printf("输入任意键继续:");
getch();
return;
else if(i==m-1)
printf("未查到该学生信息\\n");
else
printf("请输入正确的指令!");
else
printf("系统无数据!\\n");
void delate() ///删除学生信息
int num,i,k;
printf("请输入您要删除的学生学号:");
scanf("%d",&num);
for(i=0; i<m; i++)
if(stu[i].number==num)
while(1)
showInfo(i);
printf("确认删除此学生信息? 1.确认 2.取消\\n");
scanf("%d",&k);
if(k==1)
for(int j=i; j<m-1; j++)
stu[j]=stu[j+1];
m--;
save();
printf("学生信息删除成功!\\n");
return;
else if(k==2)
break;
else
printf("请输入正确的指令!\\n");
else if(i==m-1)
printf("不存在该学生信息!\\n");
void information_changes() ///学生信息的修改
int num,k;
char ch[20],s;
while(1)
printf("请输入您要修改的学生学号:");
scanf("%d",&num);
fflush(stdin);
if(num==0)
return;
for(int i=0; i<m; i++)
if(stu[i].number==num)
showInfo(i);
printf("1、学号 2、姓名 3、年龄 4、性别\\n");
printf("5、出生日期 6、地址 7、电话 8、E-mail 0、退出\\n");
printf("请输入您要修改的内容:");
while(1)
scanf("%d",&k);
fflush(stdin); //防输错
if(k>=0 && k<=5)
break;
printf("输入指令有误,请重新");
printf("输入您的指令:");
switch(k)
case 0:
return;
case 1:
printf("请输入要修改的学号:");
scanf("%d",&num);
stu[i].number=num;
break;
case 2:
printf("请输入要修改的姓名:");
scanf("%s",ch);
strcpy(stu[i].name,ch);
break;
case 3:
printf("请输入要修改的年龄:");
scanf("%d",&num);
stu[i].age=num;
break;
case 4:
printf("请输入要修改的性别:");
scanf("%c",&s);
stu[i].sex=s;
break;
case 5:
printf("请输入要修改的出生日期:");
scanf("%s",ch);
strcpy(stu[i].birthday,ch);
break;
case 6:
printf("请输入要修改的地址:");
scanf("%s",ch);
strcpy(stu[i].address,ch);
break;
case 7:
printf("请输入要修改的电话:");
scanf("%s",ch);
strcpy(stu[i].tel,ch);
break;
case 8:
printf("请输入要修改的E-mail:");
scanf("%s",ch);
strcpy(stu[i].eMail,ch);
break;
if(k>=0 && k<=8)
printf("信息修改成功!\\n");
save();
printf("输入任意键继续:");
getch();
return;
else if(i==m-1)
printf("不存在该学生信息!\\n");
break;
int main()
int n,z=1;
ifstream infile("Student.txt"); ///文件内无内容会出错
if(!infile)
cout<<"没有数据文件!\\n";
ofstream outfile("Student.txt");
outfile.close();
else
int i = 0;
while(!infile.eof())
infile>>stu[i].number>>stu[i].name>>stu[i].age>>stu[i].sex
>>stu[i].birthday>>stu[i].address>>stu[i].tel>>stu[i].eMail;
m++;
++i;
infile.close();
save();
while(1) //主系统部分
if(z!=1) //第一次不出现
system("cls"); //清空界面
printf("\\n\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t************ Student Management Information System ************\\n");
printf("\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t********* 1.输入信息 4.删除信息 *********\\n");
printf("\\t\\t\\t********* 2.筛选查找信息 5.修改信息 *********\\n");
printf("\\t\\t\\t********* 3.精准查找信息 0.退出系统 *********\\n");
printf("\\t\\t\\t***************************************************************\\n");
printf("\\t\\t\\t********************* 系统已有学生数: %2d *********************\\n",m);
printf("\\t\\t\\t***************************************************************\\n");
printf("输入您的指令:");
z=2;//清屏
while(1)
scanf("%d",&n);
fflush(stdin); //防输错
if(n>=0 && n<=5)
break;
printf("输入指令有误,请重新输入您的指令:");
switch(n)
case 0:
break;
case 1:
input_information();
break;
case 2:
showInformation();
break;
case 3:
query();
break;
case 4:
delate();
break;
case 5:
information_changes();
break;
default:
printf("请输入 0-5 命令\\n");
if(n==0)
break;
return 0;
附:测试数据
20153123 孙芳 20 F 1996.9.1 上海 17853539999 sun123@163.com
20164101 张三 18 F 1998.7.1 烟台 17853535555 zhang123@163.com
20154101 王五 18 F 1993.8.1 济南 17853535555 wang123@163.com
20165215 赵子琳 22 M 1994.10.1 潍坊 17853537777 zhao123@163.com
20153223 秦含含 20 M 1996.9.1 北京 17853539999 qin123@163.com
20155215 刘志 22 M 1994.10.1 临沂 17853531111 liu123@163.com
20164105 张也 19 M 1992.8.1 大连 17853542222 zhang1234@163.com
20154116 孙超 16 1998.11.11 南京 17853543333 sun1234@qq.com
20154105 李四 19 M 1997.9.1 德州 17853536666 li123@163.com
心得体会:
此程序最大的特点是运用C++将系统数据和本地文件实现了对等同步,但还存在很大的不足,需要后期的不断完善。
注:对错误指令的处理有待完善,错误数据无法检测。
在文件为空时会在文件中产生乱码,影响数据分析。
以上是关于学生信息管理系统的主要内容,如果未能解决你的问题,请参考以下文章
在SQL server中查询每个学生的班级、学号、姓名、平均分,结果按平均分降序排列,平均分相同者按班级排列