c++实现学生信息管理系统

实验内容:

对学生信息管理系统,要求完成以下基本任务:

1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。

2.将功能补充完全(基于文件处理,完成刷新和保存功能)。

3.将学生信息改为更好的数据组织,而非离散形式(结构体)。

提高要求:

可将程序中的不足(如数据验证)等根据自己的能力与理解完成。

需求分析

1.1实现最基本的增删改查

1.2实现文件读入和文件保存功能

1.3利用结构体将学生信息改为更好的数据组织

1.4添加数据验证功能和文件刷新

概要设计(包括数据结构及算法绘制流程图或伪代码表示)

2.1数据结构

利用结构体存储学生信息

数组存储学生的三门课成绩

String存储学号,姓名,性别

2.2算法流程图

2.2.1整体设计流程图
c++实现学生信息管理系统_第1张图片

2.2.2部分关键算法流程图

c++实现学生信息管理系统_第2张图片

源代码

下面展示一些 内联代码片

// A code block
var foo = 'bar';


#include<stdio.h>      /*I/O函数*/

#include<stdlib.h>     /*其它说明*/

#include<string.h>    /*字符串函数*/

#include<iostream>

#include<fstream>

using namespace std;

#define LEN 15           /*
学号和姓名最大字符数,实际请更改*/

#define N 50       /*
最大学生人数,实际请更改*/

int k = 1, m = 0;/* n代表当前记录的学生人数*/

int n=0;

//函数声明 

void seek();//查找学生信息 

void modify();//修改学生信息 

void insert();//增加学生信息 

void del();//删除学生信息 

void display();//显示当前信息 

void save();//保存信息 

void menu();//菜单 

void read();//文件读入 

//结构体保存学生信息

struct student{

       string StudentId;//学号 

       string
StudentName;//姓名 

       int
StudentAge;//年龄 

       string
StudentSex;//性别 

       float
score[3];//成绩数组,分别记录C语言成绩,高等数学,学英语成绩 

}stu[N];//结构体数组 

//主函数

int main()

{

       read(); //从文件读入学生信息 

       while (k)

       {

              menu();

       }

 

       return 0;

}

void read()

{

int i=0;

      ifstream in("in.txt");//从"in.txt"文件中读入信息 

             while(in.peek()!=EOF)


             {

                    i++;

             printf("读入第%d位学生的学号:\n", i );    

             in>>stu[i].StudentId;        

              printf("读入第%d 个学生的姓名:\n",i);

           in>>stu[i].StudentName;

              printf("读入第%d 个学生的年龄:\n",i);

              in>>stu[i].StudentAge;

              printf("读入第%d 个学生的性别:\n",i);

              in>>stu[i].StudentSex;

              printf("读入第%d 个学生的C语言成绩\n",i);

              in>>stu[i].score[0];

              printf("读入第%d 个学生的高等数学成绩:\n",i);

              in>>stu[i].score[1];

              printf("读入第%d 个学生的大学英语成绩:\n",i);

              in>>stu[i].score[2];    

               }

       

       n=i+1;

       in.close();//读入结束,关闭文件 

}

//系统帮助函数

void help()

{

       cout<<"\n0.欢迎使用系统帮助!"<<endl;

       cout<<"\n1.初次进入系统后,请先选择增加学生信息;"<<endl;

       cout<<"\n2.按照菜单提示键入数字代号;"<<endl;

       cout<<"\n3.增加学生信息后,切记保存;"<<endl;

       cout<<"\n4.谢谢您的使用!"<<endl;

}

 

//刷新文件

int flush(){

       char filename[LEN
+ 1];//文件名 

       int i = 0;

       cout<<"请输入要刷新学生信息的文件名:"<<endl;

       cin>>
filename;//输入文件名 

       int j = 0;

       FILE * fp;

       if ((fp =
fopen(filename, "r")) == NULL) return 0;

       //从文件读取信息 

       while
(fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId,
&stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex,
&stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {

              j++;

       }

       n = j;

       cout<<"刷新成功!!!"<<endl;

       return n;

}

 

//查找学生信息

void seek() /*查找*/

{

       int i,
item, flag;int p=n;

       string s1;
/* 以姓名和学号最长长度+1为准*/

       cout<<"------------------"<<endl;

       cout<<"-----1.按学号查询-----"<<endl;

       cout<<"-----2.按姓名查询-----"<<endl;

       cout<<"-----3.退出本菜单-----"<<endl;

       cout<<"------------------"<<endl;

       while (1)

       {

              cout<<"请选择子菜单编号:";

              cin>>item;

              flag
= 0;

              switch
(item)

              {

              case
1://按学号查询 

                     {

                     cout<<"请输入要查询的学生的学号:"<<endl;

                     cin>>s1;

                     for
(i = 1; i<=p; i++)

                     if
(stu[i].StudentId==s1)//字符串比较,如果两个学号相等 

                     {

                            flag
= 1;

                            //输出该学号的学生的信息 

                     cout<<"学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n";

                     cout<<"--------------------------------------------------------------------\n"<<endl;

               cout<<stu[i].StudentId<<"\t"<<stu[i].StudentName<<"\t"<<stu[i].StudentAge<<"\t"<<stu[i].StudentSex<<"\t"<<stu[i].score[0]<<"\t"<<stu[i].score[1]<<"\t"<<stu[i].score[2]<<endl;

                     }


                     if
(0 == flag)//学号不存在时给出提示

                            cout<<"该学号不存在!"<<endl;break;}

              case
2://按姓名查询 

              cout<<"请输入要查询的学生的姓名:"<<endl;

              cin>>s1;

                     for
(i = 1; i<=p; i++)

                     if
(stu[i].StudentName==s1)

                     {

                            flag
= 1;

                            //输出该学号的学生的信息 

                     cout<<"学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩"<<endl;

                     cout<<"--------------------------------------------------------------------"<<endl;

        cout<<stu[i].StudentId<<"\t"<<stu[i].StudentName<<"\t"<<stu[i].StudentAge<<"\t"<<stu[i].StudentSex<<"\t"<<stu[i].score[0]<<"\t"<<stu[i].score[1]<<"\t"<<stu[i].score[2]<<endl;

                     }break;

                     if
(0 == flag)//姓名不存在时给出提示 

                            printf("该姓名不存在!\n"); 

              case
3:return;

              default:printf("请在1-3之间选择\n");

              }

       }

}

 

//修改学生信息

void modify() /*修改信息*/

{

       int i,
item, num = -1;

       int p=n;

       string
s1,s2; /* 以姓名和学号最长长度+1为准*/

       cout<<"请输入要要修改的学生的学号:"<<endl;

       cin>>
s1;//输入要要修改的学生的学号

       for (i =
1; i <=p; i++){

              if
(stu[i].StudentId==s1){/*比较字符串是否相等*/

                     num
= i;

              cout<<"------------------"<<endl;

              cout<<"1.修改姓名"<<endl;

              cout<<"2.修改年龄"<<endl;

              cout<<"3.修改性别"<<endl;

              cout<<"4.修改C语言成绩"<<endl;

              cout<<"5.修改高等数学成绩"<<endl;

              cout<<"6.修改大学英语成绩"<<endl;

              cout<<"7.退出本菜单"<<endl;

              cout<<"------------------"<<endl;

                     while
(1)

                     {

                            cout<<"请选择子菜单编号:";

                            cin>>item;//输入子菜单编号 

                            switch
(item)

                            {

                            case
1:

                                   cout<<"请输入新的姓名:"<<endl;

                                   cin>>stu[num].StudentName;//输入的新的姓名 

                                   break;

                            case
2:

                                   cout<<"请输入新的年龄:"<<endl;

                                   cin>>stu[num].StudentAge;//输入新的年龄 

                                   break;

                            case
3:

                                   cout<<"请输入新的性别:"<<endl;

                                   cin>>stu[i].StudentSex
;//输入的新的性别 

                                   break;

                            case
4:

                                   cout<<"请输入新的C语言成绩:"<<endl;

                                   cin>>stu[num].score[0]
;//输入的新的C语言成绩

                                   break;

                            case
5:

                                   cout<<"请输入新的高等数学成绩:"<<endl;//输入的新的高等数学成绩 

                                   cin>>stu[num].score[1];

                                   break;

                            case
6:

                            cout<<"请输入新的大学英语成绩:"<<endl;//输入的新的大学英语成绩

                                   cin>>stu[num].score[2];

                                   break;

                            case
7:   return;

                            default:cout<<"请在1-7之间选择"<<endl;

                            }

                     }

                     cout<<"修改完毕!请及时保存!"<<endl;

              }

       

              else{

                     cout<<"没有该学生学号!!!"<<endl;

              }

       }

}

 

void sort()//按学号排序

{

       int i, j,
k, *p, *q, s;

       string
temp, ctemp;int itemp=0;

       float
ftemp;

       for (i =
1; i<=n - 1; i++)

       {

              for
(j = n - 1; j>i; j--)

              if
(stu[j - 1].StudentId> stu[j].StudentId)//如果前一个学号比后一个学号大 

              {

                     //交换学号 

                     temp=stu[j
- 1].StudentId;

                     stu[j -
1].StudentId=stu[j].StudentId;

              stu[j].StudentId=temp;

                     //交换姓名 

                     temp=stu[j
- 1].StudentName;

              stu[j
- 1].StudentName=stu[j].StudentName;

              stu[j].StudentName=
temp;

                     //交换性别 

                     ctemp
= stu[j - 1].StudentSex;

                     stu[j
- 1].StudentSex = stu[j].StudentSex;

                     stu[j].StudentSex
= ctemp;

                     //交换年龄 

                     itemp
= stu[j - 1].StudentAge ;

                     stu[j
- 1].StudentAge = stu[j].StudentAge;

                     stu[j].StudentAge
= itemp;

                     //交换三科成绩 

                     for
(k = 0; k<3; k++)

                     {

                            ftemp
= stu[j - 1].score[k];

                            stu[j
- 1].score[k] = stu[j].score[k];

                            stu[j].score[k]
= ftemp;

                     }

              }

       }

}

//添加学生信息函数

void insert() 

{

       int i = n,
j, flag;

       cout<<"请输入待增加的学生数:"<<endl;

       cin>>m;

       if(m>0)

       {      

       for(int
i=n-1;i<n+m;i++)

       {

              flag
= 1;

                     while
(flag)

                     {

                            flag = 0;

                            printf("请输入第%d位学生的学号:\n", i + 1);

                            cin>>
stu[i].StudentId;

                            for
(j = 0; j <= i; j++){

                                   if
(stu[i].StudentId==stu[j].StudentId){//如果学号已经存在 

                                          cout<<"该学号已存在,请重新输入!"<<endl;

                                          flag
= 1;

                                          break;

                                   }

                            }

                     }

              printf("请输入第%d 个学生的姓名:\n",i+1);

           cin>>stu[i].StudentName;

              printf("请输入第%d 个学生的年龄:\n",i+1);

              cin>>stu[i].StudentAge;

              printf("请输入第%d 个学生的性别:\n",i+1);

              cin>>stu[i].StudentSex;

              printf("请输入第%d 个学生的C语言成绩\n",i+1);

              cin>>stu[i].score[0];

              if(stu[i].score[0]<0||stu[i].score[0]>100)//对输入的成绩进行判错,成绩应该在0-100之间 

              {

                     cout<<"输错了,请重新输入成绩" <<endl;

                     cin>>stu[i].score[0];

              }

              printf("请输入第%d 个学生的高等数学成绩:\n",i+1);

              cin>>stu[i].score[1];

              if(stu[i].score[0]<0||stu[i].score[0]>100)

              {

                     cout<<"输错了,请重新输入成绩" <<endl;

                     cin>>stu[i].score[1];

              }

              printf("请输入第%d 个学生的大学英语成绩:\n",i+1);

              cin>>stu[i].score[2];

              if(stu[i].score[0]<0||stu[i].score[0]>100)

              {

                     cout<<"输错了,请重新输入成绩" <<endl;

                     cin>>stu[i].score[2];

              }

              

       }

       }

              n
+= m;//学生数增加 

       cout<<"学生信息增加完毕!!!"<<endl;          

}

//删除学生信息函数

void del()

{

       int i, j,
flag = 0;

       char
s1[LEN + 1];

       printf("请输入要删除学生的学号:\n");

       scanf("%s",
s1);

       for (i =
0; i < n; i++){

              if
(stu[i].StudentId==s1){

                     flag
= 1;

                     //要删除学生后面的学生往前移一位

                     for
(j = i; j <=n - 1; j++){

                            stu[j]
= stu[j + 1];//

                     }

              }

       }

              //查找失败

              if
(0 == flag){

                     printf("该学号不存在!!!\n");

              }

              if
(1 == flag){

                     printf("删除成功!!!");

                     //删除成功,学生人数减1

                     n--;

              }

              system("pause");

}

//显示全部数据信息

void display()

{

       int i;

              printf("学生学号 \t学生姓名 \t年龄   \t性别  
\tC语言成绩\t高等数学 \t大学英语成绩\n");

              printf("--------------------------------------------------------------------\n");

              for
(i = 0; i<=n; i++)

              {

        cout<<stu[i].StudentId<<"\t"<<stu[i].StudentName<<"\t"<<stu[i].StudentAge<<"\t"<<stu[i].StudentSex<<"\t"<<stu[i].score[0]<<"\t"<<stu[i].score[1]<<"\t"<<stu[i].score[2]<<endl;

              }

}

void save(){

       int i;

       sort();

       FILE *fp;

       ofstream
out("in.txt");

       for (i =
1; i < n; i++){

        out<<stu[i].StudentId<<"\t"<<stu[i].StudentName<<"\t"<<stu[i].StudentAge<<"\t"<<stu[i].StudentSex<<"\t"<<stu[i].score[0]<<"\t"<<stu[i].score[1]<<"\t"<<stu[i].score[2]<<endl;

       }

       printf("保存成功!!!\n");

       out.close();

}

void menu()/* 界面*/

{

       int num;

       printf("
\n\n                    \n\n");

       printf(" 
******************************************************\n\n");

       printf("  *                学生信息管理系统                    *\n \n");

       printf(" 
******************************************************\n\n");

       printf("*********************系统功能菜单*************************       \n");

       printf("     ----------------------   ----------------------   \n");

       printf("    
*********************************************     \n");

       printf("     * 0.系统帮助及说明  * *  1.刷新学生信息   *     \n");

       printf("    
*********************************************     \n");

       printf("     * 2.查询学生信息    * *  3.修改学生信息   *     \n");

       printf("    
*********************************************     \n");

       printf("     * 4.增加学生信息    * *  5.按学号删除信息 *     \n");

       printf("    
*********************************************     \n");

       printf("     * 6.显示当前信息    * *  7.保存当前学生信息*     \n");

       printf("     **********************
**********************     \n");

       printf("     * 8.退出系统        *                            \n");

       printf("     **********************                            \n");

       printf("     ----------------------   ----------------------                           \n");

       printf("请选择菜单编号:");

       scanf("%d",
&num);

       switch (num)

       {

       case
0:help(); break;

       case
1:flush(); break;

       case
2:seek(); break;

       case
3:modify(); break;

       case
4:insert(); break;

       case
5:del(); break;

       case
6:display(); break;

       case
7:save(); break;

       case 8:

              k =
0; 

              printf("即将退出程序!\n");

              break;

       default:printf("请在0-8之间选择\n");

       }

}

 

你可能感兴趣的:(c++)