学生成绩管理(上)

简介: 学生成绩管理1.项目简介学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。本项目是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改学生数据;删除学生数据。

学生成绩管理

1.项目简介

学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。本项目是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改学生数据;删除学生数据。


2.设计思路

本项目的实质是完成对学生成绩信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。


3.数据结构

本项目的数据是一组学生的成绩信息,每条学生的成绩信息由学号、姓名和成绩组成,这组学生的成绩信息具有相同特性,属于同一数据对象,相邻数据元素之间存在序偶关系。由此可以看出,这些数据具有线性表中数据元素的性质,所以该系统的数据采用线性表来存储。


顺序表是线性表的顺序存储结构,是指用一组连续的内存单元依次存放线性表的数据元素。在顺序存储结构下,逻辑关系相邻的两个元素在物理位置上也相邻,这是顺序表的特点。本项目可以采用顺序表的线性表顺序存储结构。


若一个数据元素仅占一个存储单元,第i个数据元素的地址为:

Loc(ai)=loc(a1)+(i-1)

假设线性表中每个元素占用k个存储单元,那么在顺序表中,线性表的第i个元素的存储位置与第1个元素的存储位置的关系是:

Loc(ai)=loc(a1)+(i-1)*k

这里Loc(ai)是第i个元素的存储位置,loc(a1)是第1个元素的存储位置,也称为线性表的基址。显然,顺序表便于进行随机访问,故线性表的顺序存储结构是一种随机存储结构。

顺序表适宜于做查找这样的静态操作;顺序存储的优点是存储密度大,存储空间利用率高。缺点是插入或删除元素时不方便。


由于C语言的数组类型也有随机存储的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。数组实现线性表的顺序存储的优点是可以随机存取表中任一元素O(1),存储空间使用紧凑;缺点是在插入,删除某一元素时,需要移动大量元素O(n),预先分配空间需按最大空间分配,利用不充分,表容量难以扩充。

用结构体类型定义每个学生数据,故该数组中的每个数据的结构可描述为:

typedef struct STU

{ char stuno[10]; //学号

char name[10]; //姓名

float score; //成绩

} ElemType;


程序主要功能:

输入学生数据; 输出学生数据; 学生数据查询; 添加学生数据; 修改学生数据; 删除学生数据。

函数之间的调用关系:

1.调用函数void input( )输入相对应学生的学号、姓名和成绩

2.调用函数void ListDelete_Sq ( )删除学生成绩则必须对链表结点进行 删除意味着将某个要删除结点前后的连续打断去掉该结点,使前后指针变量重新连接,完成结点删除任务

3.调用函数void LocateElem_Sq( )查询所储存的元素

4.调用函数void ListInsert_Sq( )进行修改

5.调用函数void ListTraverse_Sq()进行输出


详细设计

1.删除学生信息

输入要删除的学生的学号,调用删除函数int ListDelete_Sq()。


判断学号sno是否存在的实现方法或关键代码:

        cout<<"请输入要删除的学生的学号:";
        cin>>e.id;
        char yn;
        i=LocateElem_Sq(L,e);
        if(i==0)
        {
            cout<<"学号为:"<<e.id<<" 的学生不存在,不能被删除!!\n";
            break ;
        }

删除学号为sno的学生信息的方法或关键代码:

   cout<<"你确实要删除么?";
            cin>>yn;
            if(yn=='Y'||yn=='y')
                ListDelete_Sq(L,i,e);
            else
            { cout <<"!!不删除!!"<<endl;}
            break;

2.添加学生信息

{
    int n;
    Student e;
    ofstream wfile;
    wfile.open(tid,ios_base::binary);
    cout<<"请输入信息表中的联系人人数:";
    cin>>n;
    cout<<"请输入学生的学号、姓名、性别、班级、科目、成绩:\n";
    for(int i=1 ;i<=n;i++)
    {
        cin>>e.id>>e.name>>e.sex>>e.class_number>>e.class_name>>e.score;
        ListInsert_Sq(L,e);
        wfile.write((char *)(&e),sizeof(Student));
    }
    wfile.close();
}

3.修改学生信息

cout<<"请输入要修改的学生的学号:";
              cin>>e.id;
              i=LocateElem_Sq(L, e);
              if(i!=0)
              {     GetElem_Sq(L,i,e);
                    SingleOut(e);
                    cout<<"确实要修改么Y/N?";
                    cin>>yn;
                    if(yn=='y'||yn=='Y')
                    {
                        ListDelete_Sq(L,i,e);
                        cout<<"请输入该学生新的学号、姓名、性别、班级、科目、成绩:\n";
                        cin>>e.id>>e.name>>e.sex>>e.class_number>>e.class_name>>e.score;
                        ListInsert_Sq(L,e);
                    }
              }

4.学生数据查询

{ cout<<"请输入要查找的学生学号:";
              cin>>e.id;
              i=LocateElem_Sq(L,e);
              if(i!=0)
              {     GetElem_Sq(L,i,e);
                    SingleOut(e);
              }
              else cout<<endl<<"!!学号为:"<<e.id<<" 的学生不存在!!\n";
            }


相关文章
|
3月前
学生成绩
【2月更文挑战第6天】学生成绩。
23 1
|
25天前
有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,并存到磁盘中
有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,并存到磁盘中
|
9月前
|
C++
成绩统计
小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。如果得分至少是60分,则称为及格。
62 0
|
6月前
某学科成绩的录入并显示出最高分,最低分,平均值。
某学科成绩的录入并显示出最高分,最低分,平均值。
教务系统以数组的方式输入6位同学的成绩,输出平均成绩(调用函数,结果保留两位小数)并分别按照成绩高低显示出每位同学的成绩状况。
教务系统以数组的方式输入6位同学的成绩,输出平均成绩(调用函数,结果保留两位小数)并分别按照成绩高低显示出每位同学的成绩状况。
|
9月前
wustojc4006学生成绩评定
wustojc4006学生成绩评定
26 0
|
10月前
|
Windows
学生信息管理信息系统--添加窗体(学籍,课程,班级,成绩)问题汇总
学生信息管理信息系统--添加窗体(学籍,课程,班级,成绩)问题汇总
|
11月前
|
Python
学生成绩及等级
学生成绩及等级
60 0
|
11月前
|
存储 C++
C++之学生成绩信息管理系统(上)
C++之学生成绩信息管理系统(上)
131 0