课程设计:c++实现学生成绩管理系统

课程设计:c++实现学生成绩管理系统学生成绩管理系统课程设计 作为计算机科学专业学生的一门必修课 印象非常深刻 上机 编码 写报告 答辩 最后很多人勉强完成了功课 但是却很少能学到东西 算是一种遗憾吧 即使我们毕业了 仍然会想回去再做一便 今天就来复习一遍这个课题 也让自己学习学习 学生成绩管理系统 对于刚学编程的人来说 是有一些难度的 有循环要考虑 还需要注意界面打印 菜单管理 输入输出控制 文件读写操作 排序算法等等技巧 学生成绩管理系统 可以分为如下几个功能 主菜单 1 输入学生成

    学生成绩管理系统课程设计,作为计算机科学专业学生的一门必修课,印象非常深刻,上机,编码,写报告,答辩,最后很多人勉强完成了功课,但是却很少能学到东西,算是一种遗憾吧,即使我们毕业了,仍然会想回去再做一遍。

    今天就来复习一遍这个课题,也让自己学习学习。

    学生成绩管理系统,对于刚学编程的人来说,是有一些难度的,有循环要考虑,还需要注意界面打印,菜单管理,输入输出控制,文件读写操作,排序算法等等技巧。

    学生成绩管理系统,可以分为如下几个功能:

     课程设计:c++实现学生成绩管理系统

    系统菜单:首先进入系统,我们会看见我们的系统菜单,根据提示,我们可以选择我们需要的操作编号:

    课程设计:c++实现学生成绩管理系统

    输入学生成绩:该功能是每次录入都会将新录入信息替换原来的学生成绩信息,仅限初次使用,后续慎用,类似新增,但是它是每次都会擦除原来学生信息。

    课程设计:c++实现学生成绩管理系统

    统计学生成绩:将学生成绩按照平均分显示,是一个简单的输出。

    课程设计:c++实现学生成绩管理系统

    查找学生成绩:按照学生学号查询。

    课程设计:c++实现学生成绩管理系统

    修改学生成绩:这里只是将对应学号的学生成绩修改,而不是连班级、学号、姓名也改变。

    课程设计:c++实现学生成绩管理系统

    修改之后:

    课程设计:c++实现学生成绩管理系统

    删除学生成绩:按照学号删除对应学生成绩信息记录。

    课程设计:c++实现学生成绩管理系统

    删除之后,学号为3的成绩记录就没有了:

    课程设计:c++实现学生成绩管理系统

    新增学生成绩:在原来学生成绩的基础上,新增学生成绩信息。

    课程设计:c++实现学生成绩管理系统

    按平均分排序:按照平均分降序排序,这里使用了简单的冒泡排序算法。

    课程设计:c++实现学生成绩管理系统

    显示学生成绩:遍历所有学生成绩,然后打印出来。

    课程设计:c++实现学生成绩管理系统

    退出管理系统: 退出菜单。

    学生成绩管理系统,主要是管理学生成绩信息的,这里可以简单的理解有这么一个对象,包含班级、学号、姓名、电子成绩、C++成绩、多媒体成绩、英语成绩、数学成绩、大学物理成绩、体育成绩、政治成绩,平均分这几项属性。这样我们可以定义这样的一个学生Student结构体或者类:

class Student{ private: char class_0[20]; //班级,因为class是关键字,我们用了class_0来表示班级 int num; //学号 char name[8]; //姓名 姓名定义的长度是8,如果输入拼音或者英文,很有可能超出这个范围,要小心处理。 float elec; //电子 float c_program; //C++ float media; //多媒体 float english; //大学英语 float math; //高等数学 float sport; //体育 float polity; //政治 float average; //平均分 }stu[100];

    课程分数实际上都是整数,很难有小数点,但是平均分大概率是一个浮点数,所以必须用浮点数表示。但是使用浮点数表示分数也没有问题。 

    因为数据来源于文本文件,所以这里对文件读写操作非常频繁,涉及到读写操作的:1:输入,4:删除,5:修改,6:新增,7:排序。这些操作都有一个共同的特点,就是需要写入操作(Write)。这里因为是文件系统,没有办法做到增量修改,每次只能是覆盖式的写入。为了保留原来的纪录,可能还需要读取操作(Read)。

    这个程序,如果第一次运行,没有进行学生信息录入,即菜单项中的[1]输入学生成绩,默认如果执行[8]显示所有学生成绩,会报错,因为没有score.txt文件生成,只有进行了[1]操作之后,才会生成这个文件,所以为了避免程序报错,我们可以在项目路径下创建一个score.txt文件。

    默认,我们手动创建的这个文件中如果有中文,编码默认是UTF-8,保存之后,显示在界面上,会显示乱码,因为cmd终端默认的编码是ANSI格式,所以这个文件我们需要保存为ANSI格式,才能正确显示中文。

    初始文件score.txt格式如下:

2 10601 2 刘莹 86 84 90 80 88 82 85 85 10601 1 吴昊 89 90 91 90 89 91 90 90

    该文件第一行,表示学生成绩总数,这个数字需要我们手动写入到文件里面,后面换行才是学生成绩,没有列标题,依次对应:班级、学号、姓名、电子成绩、C++成绩、多媒体成绩、英语成绩、数学成绩、大学物理成绩、体育成绩、政治成绩、平均分。一条记录占一行。

     读的时候,首先读取记录数,然后按行读取学生成绩信息,所以有这样的代码:

    课程设计:c++实现学生成绩管理系统

    同理,写入文件的时候,我们也要先写入记录数,然后依次写入学生成绩信息:

    课程设计:c++实现学生成绩管理系统 

    我们没有使用很复杂的数据结构,这里就是利用了数组来操作学生成绩,涉及到修改的操作,基本就是先将文本文件中的数据读入数组,然后操作数组来实现新增,修改,删除,排序操作,最后将新的数组写入文件成为新的文件。 

     下面给出源码:

#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) #define _CRT_SECURE_NO_DEPRECATE #endif #include 
  
    #include 
   
     #include 
    
      using namespace std; class Student{ public: friend void Input(Student stu[]); friend void Statistic(Student stu[]); friend void Lookup(Student stu[]); friend void Modify(Student stu[]); friend void Delete(Student stu[]); friend void Output(Student stu[]); friend void Insert(Student stu[]); friend void Sort(Student stu[]); friend void Write(Student stu[],int n); friend int Read(Student stu[]); private: int num; char name[8]; char class_0[20]; float elec; float c_program; float english; float math; float media; float sport; float polity; float average; int order; }stu[100]; void Write(Student stu[], int n) { fstream myFile; myFile.open("score.txt", ios::out | ios::binary); if (!myFile) { cout << "score.txt can't open!" << endl; abort(); } int count = n; myFile << count << endl< 
     
       > count; for (int i = 0; i <= count; i++) { myFile >> stu[i].class_0 >> stu[i].num >> stu[i].name >> stu[i].elec >> stu[i].c_program >> stu[i].media >> stu[i].english >> stu[i].math >> stu[i].sport >> stu[i].polity >> stu[i].average; } myFile.close(); return count; } void Input(Student stu[]) { system("cls"); int i = 0; int flag; char sign = '0'; cout << endl<<"======>> 请输入学生成绩 <<======"< 
      
        > stu[i].class_0; loop: cout << "学号:"; cin >> stu[i].num; int c = 0; while (c < i) { c++; if (stu[i].num == stu[i - c].num) { cout << "您输入的学号已存在!请重新输入。" << endl; goto loop; } } cout << "姓名:"; cin >> stu[i].name; do { flag = 0; cout << "电子技术成绩:"; cin >> stu[i].elec; if (stu[i].elec > 100 || stu[i].elec < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); do { flag = 0; cout << "C++程序设计成绩:"; cin >> stu[i].c_program; if (stu[i].c_program > 100 || stu[i].c_program < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); do { flag = 0; cout << "多媒体技术成绩:"; cin >> stu[i].media; if (stu[i].media > 100 || stu[i].media < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); do { flag = 0; cout << "大学英语成绩:"; cin >> stu[i].english; if (stu[i].english > 100 || stu[i].english < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); do { flag = 0; cout << "高等数学成绩:"; cin >> stu[i].math; if (stu[i].math > 100 || stu[i].math < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); do { flag = 0; cout << "大学体育成绩:"; cin >> stu[i].sport; if (stu[i].sport > 100 || stu[i].sport < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); do { flag = 0; cout << "马克思主义基本原理成绩:"; cin >> stu[i].polity; if (stu[i].polity > 100 || stu[i].polity < 1) { cout << " 对不起,请输入1-100之间的数字!!\n"; } else { flag = 1; } } while (flag == 0); stu[i].average = (stu[i].elec + stu[i].c_program + stu[i].media + stu[i].english + stu[i].math + stu[i].sport + stu[i].polity) / 7; cout << " 平均分为:" << stu[i].average< 
       
         > 提示:是否继续写入学生成绩 ?(y/n)"; cin >> sign; i++; } Write(stu, i); } void Statistic(Student stu[]) { system("cls"); int n = Read(stu); cout << endl << "======>> 输出学生统计数据 <<======\n" << endl; cout << "---------------------------------------" << endl; cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t" << "平均分" << endl; cout << "---------------------------------------" << endl; for (int i = 0; i < n; i++) cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t" << stu[i].average << endl; cout << "---------------------------------------" << endl; system("pause"); } void Lookup(Student stu[]) { system("cls"); int n = Read(stu); int s; int i = 0; cout << endl << "======>> 查找学生成绩 <<======" << endl; cout << "请输入要查找学生的学号:"; cin >> s; while ((stu[i].num - s) != 0 && i < n)i++; if (i == n) { cout << "======>> 对不起,无法找到该学生...... <<======" << endl; } else { cout << "----------------------------" << endl; cout << "班级:" << stu[i].class_0 << endl; cout << "学号:" << stu[i].num << endl; cout << "姓名:" << stu[i].name << endl; cout << "电子技术:" << stu[i].elec << endl; cout << "C++程序设计:" << stu[i].c_program << endl; cout << "多媒体技术:" << stu[i].media << endl; cout << "大学英语:" << stu[i].english << endl; cout << "高等数学:" << stu[i].math << endl; cout << "大学体育:" << stu[i].sport << endl; cout << "马克思主义基本原理:" << stu[i].polity << endl; cout << "平均分:" << stu[i].average << endl; } } void Modify(Student stu[]) { system("cls"); int n = Read(stu); int s; int i = 0; cout << endl << "======>> 修改学生成绩 <<======" << endl; cout << "请输入要修改成绩学生的学号:"; cin >> s; while ((stu[i].num - s) != 0 && i < n)i++; if (i == n) { cout << "======>> 对不起,无法找到该学生...... <<======" << endl; } else { cout << "------------------------------------------------------------------------------------" << endl; cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t" << "电子" << "\t" << "C++" << "\t" << "多媒体" << "\t" << "英语" << "\t" << "数学" << "\t" << "体育" << "\t" << "政治" << "\t" << "平均分" << endl; cout << "------------------------------------------------------------------------------------" << endl; cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t" << stu[i].elec << "\t" << stu[i].c_program << "\t" << stu[i].media << "\t" << stu[i].english << "\t" << stu[i].math << "\t" << stu[i].sport << "\t" << stu[i].polity << "\t" << stu[i].average << endl; cout << endl << "请重新输入该学生成绩: " << endl; cout << "电子技术成绩:"; cin >> stu[i].elec; cout << "C++成绩:"; cin >> stu[i].c_program; cout << "多媒体技术成绩:"; cin >> stu[i].media; cout << "大学英语成绩:"; cin >> stu[i].english; cout << "高等数学成绩:"; cin >> stu[i].math; cout << "大学体育成绩:"; cin >> stu[i].sport; cout << "马克思主义基本原理成绩:"; cin >> stu[i].polity; stu[i].average = (stu[i].elec + stu[i].c_program + stu[i].media + stu[i].english + stu[i].math + stu[i].sport + stu[i].polity) / 7; cout << "平均分:" << stu[i].average << endl; char c; cout << "======>> 是否保存数据 ?(y/n)"; cin >> c; if (c != 'n' && c != 'N') Write(stu, n); } } void Delete(Student stu[]) { system("cls"); int n = Read(stu); int s; int i = 0, j ; cout << endl << "======>> 删除学生成绩 <<======" << endl; cout << "请输入要删除的学生的学号:"; cin >> s; while ((stu[i].num - s) != 0 && i < n)i++; if (i == n) { cout << "======>> 对不起,无法找到该学生...... <<======" << endl; } else { for (j = i; j < n - 1; j++) { strcpy(stu[j].class_0,stu[j + 1].class_0); stu[j].num = stu[j + 1].num; strcpy(stu[j].name, stu[j + 1].name); stu[j].elec = stu[j + 1].elec; stu[j].c_program = stu[j + 1].c_program; stu[j].media = stu[j + 1].media; stu[j].english = stu[j + 1].english; stu[j].math = stu[j + 1].math; stu[j].sport = stu[j + 1].sport; stu[j].polity = stu[j + 1].polity; stu[j].average = stu[j + 1].average; } cout << "======>> 提示:已成功删除!" << endl; } Write(stu, n - 1); } void Insert(Student stu[]) { system("cls"); int n = Read(stu); char s='0'; cout << endl << "=======>> 增加学生成绩 <<========" << endl; while (s != 'n' && s != 'N') { cout << "班级:"; cin >> stu[n].class_0; cout << "学号:"; cin >> stu[n].num; cout << "姓名:"; cin >> stu[n].name; cout << "电子技术成绩:"; cin >> stu[n].elec; cout << "C++成绩:"; cin >> stu[n].c_program; cout << "多媒体技术成绩:"; cin >> stu[n].media; cout << "大学英语成绩:"; cin >> stu[n].english; cout << "高等数学成绩:"; cin >> stu[n].math; cout << "大学体育成绩:"; cin >> stu[n].sport; cout << "马克思主义基本原理成绩:"; cin >> stu[n].polity; stu[n].average = (stu[n].elec + stu[n].c_program + stu[n].media + stu[n].english + stu[n].math + stu[n].sport + stu[n].polity) / 7; cout << "平均分:" << stu[n].average << endl; n++; cout << "======>> 是否继续插入(y/n)"; cin >> s; } Write(stu, n); } void Sort(Student stu[]) { system("cls"); int i, j, k; float s; char t[20]; cout << endl << "======>> 降序排列 <<======" << endl; int n = Read(stu); for (i = 0; i < n-1; i++) { for (j = 0; j < n - 1; j++) { if (stu[j].average < stu[j + 1].average) { //交换课程 strcpy(t, stu[j + 1].class_0); strcpy(stu[j + 1].class_0, stu[j].class_0); strcpy(stu[j].class_0, t); //num k = stu[j + 1].num; stu[j + 1].num = stu[j].num; stu[j].num = k; //name strcpy(t, stu[j + 1].name); strcpy(stu[j + 1].name, stu[j].name); strcpy(stu[j].name, t); //elec s = stu[j + 1].elec; stu[j + 1].elec = stu[j].elec; stu[j].elec = s; //c_program s = stu[j + 1].c_program; stu[j + 1].c_program = stu[j].c_program; stu[j].c_program = s; //media s = stu[j + 1].media; stu[j + 1].media = stu[j].media; stu[j].media = s; //english s = stu[j + 1].english; stu[j + 1].english = stu[j].english; stu[j].english = s; //math s = stu[j + 1].math; stu[j + 1].math = stu[j].math; stu[j].math = s; //sport s = stu[j + 1].sport; stu[j + 1].sport = stu[j].sport; stu[j].sport = s; //polity s = stu[j + 1].polity; stu[j + 1].polity = stu[j].polity; stu[j].polity = s; //average s = stu[j + 1].average; stu[j + 1].average = stu[j].average; stu[j].average = s; } } } cout << "------------------------------------------------------------------------------------" << endl; cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t" << "电子" << "\t" << "C++" << "\t" << "多媒体" << "\t" << "英语" << "\t" << "数学" << "\t" << "体育" << "\t" << "政治" << "\t" << "平均分" << endl; cout << "------------------------------------------------------------------------------------" << endl; for (int i = 0; i < n; i++) { stu[i].order = i + 1; cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t" << stu[i].elec << "\t" << stu[i].c_program << "\t" << stu[i].media << "\t" << stu[i].english << "\t" << stu[i].math << "\t" << stu[i].sport << "\t" << stu[i].polity << "\t" << stu[i].average << endl; } Write(stu, n); } void Output(Student stu[]) { system("cls"); int n = Read(stu); cout << endl << "======>> 显示全部学生成绩 <<======" << endl; if (!stu) { cout << "没有记录"; } else { cout << "------------------------------------------------------------------------------------" << endl; cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t" << "电子" << "\t" << "C++" << "\t" << "多媒体" << "\t" << "英语" << "\t" << "数学" << "\t" << "体育" << "\t" << "政治" << "\t" << "平均分" << endl; cout << "------------------------------------------------------------------------------------" << endl; for (int i = 0; i < n; i++) { cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t" << stu[i].elec << "\t" << stu[i].c_program << "\t" << stu[i].media << "\t" << stu[i].english << "\t" << stu[i].math << "\t" << stu[i].sport << "\t" << stu[i].polity << "\t" << stu[i].average << endl; } cout << "------------------------------------------------------------------------------------" << endl; } } int menu() { char c; do { system("cls"); cout << "" << endl; cout << "----------------欢迎使用学生成绩管理系统---------------" << endl; cout << " * 【1】输入学生成绩 * " << endl; cout << " * 【2】显示统计数据 * " << endl; cout << " * 【3】查找学生成绩 * " << endl; cout << " * 【4】修改学生成绩 * " << endl; cout << " * 【5】删除学生成绩 * " << endl; cout << " * 【6】插入学生成绩 * " << endl; cout << " * 【7】按平均分排列 * " << endl; cout << " * 【8】显示学生成绩 * " << endl; cout << " * 【0】退出管理系统 * " << endl; cout << "" << endl; cout << "请选择您的操作 (0-8):" << endl; c = getchar(); } while (c < '0' || c > '8'); return (c - '0'); } int main() { for (;;) { switch (menu()) { case 1: Input(stu); break; case 2: Statistic(stu); break; case 3: Lookup(stu); system("pause"); break; case 4: Modify(stu); system("pause"); break; case 5: Delete(stu); system("pause"); break; case 6: Insert(stu); system("pause"); break; case 7: Sort(stu); system("pause"); break; case 8: Output(stu); system("pause"); break; case 0: cout << endl << "================感谢您使用学生成绩管理系统==============\n" << endl; exit(0); } } return 0; } 
        
       
      
     
    
  

    该代码在visual studio 2019上运行没有问题,不知道在别的IDE中有没有问题,这是一个纯c++实现的,没有参杂c的内容,但是如果用c来实现,也基本就是这个样子,就是前面的Student类换成结构体struct,输入输出改为scanf,printf ,文件读写改为c的,其他的没有太大的改变。

    如下所示,当我们一开始运行这个程序,没有录入学生成绩,直接点击【8】显示学生成绩,它会提示失败,并抛出错误:

    课程设计:c++实现学生成绩管理系统

    这就是前面提到的那个问题,我们需要手动创建一个score.txt文件并写入相关记录,文件格式以及数据在前面你已经提到,或者我们点击【1】输入学生成绩,创建这个文件也是可以的,后续反复运行这个程序也不会报错了。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228481.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:55
下一篇 2026年3月16日 下午6:55


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号