欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-13 19:15:49
...

实验内容:

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

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

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

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

提高要求:

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

需求分析

1.1实现最基本的增删改查

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

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

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

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

2.1数据结构

利用结构体存储学生信息

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

String存储学号,姓名,性别

2.2算法流程图

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

2.2.2部分关键算法流程图

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

源代码

下面展示一些 内联代码片

// 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++