C++实现学生成绩管理系统

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}

}

//插入学生成绩记录

student* stud::insert(student* head)

{

p1 = new student;

Inputs(p1); //调用子函数 增加数据

p2 = head;

student* p3 = NULL;

while ((p2->number < p1->number) && p2->next != NULL)

{

p3 = p2;

p2 = p2->next;

}

if (p2->number > p1->number)

{

p1->next = p2;

if (p3 == NULL) // 若当前值是最小的

return p1;

p3->next = p1;

return head;

}

else

{

p2->next = p1;

p1->next = NULL;

return head;

}

//清空数据

student* stud::clear(student* head)

{

while (head)

{

p1 = head->next;

delete head;

head = p1;

}

return head;

}

//排序统计函数

student* stud::stat(student* head)

{

p2 = head;

p1 = p2->next;

while (p2->next) //冒泡法

{

if (p2->number > p1->number)

{ // 把头指针指向当前比较小的节点

p2->next = p1->next;

p1->next = head;

head = p1;

// 把用于比较的两个指针复位

//p2=head;

p1 = p2->next;

}

else

{ // 指向下一个节点

p2 = p2->next;

p1 = p2->next;

}//-------------------------------------------

}

cout << “当前表以按学生总分排序成功” << endl;

return head;

}

//删除记录

student* stud::del(student* head, char* p)

{

p1 = head;

p2 = NULL;

while (strcmp(p1->name, p) && p1->next != NULL)

{

p2 = p1;

p1 = p1->next;

}

if (!strcmp(p1->name, p))

{

if (p1 == head)

head = p1->next;

else

p2->next = p1->next;

cout << “删除成功,OK” << endl;

delete p1;

}

else

cout << " 没找到姓名" << p << “的学生.\n”; //结点没找到

return head;

}

//统计总分

void total(student* p)

{

p->number = p->Ynum + p->Snum + p->Enum;

}

//查找函数

student* stud::find(student* head, char* p, int& n)

{

p2 = head;

while (strcmp(p2->name, p) != 0 && p2->next != NULL)

p2 = p2->next;

if (0 == strcmp(p2->name, p))

{

cout << setw(6) << p2->name << setw(8)

<< p2->id << setw(8) << p2->Ynum

<< setw(8) << p2->Snum << setw(8)

<< p2->Enum << setw(7) << p2->number << endl;

n++;

return p2;

}

else

if (n == 0)

{

system(“cls”);

cout << “对不起,没有您要查找的学生数据” << endl;

}

return NULL;

}

//增加学生记录

student* stud::input(student* head)

{

p1 = new student;

p2 = head;

Inputs(p1); //调用子函数 增加数据

if (head == NULL)

{

head = p1;

p1->next = NULL;

return head;

}

while (p2->next != NULL)

p2 = p2->next;

p2->next = p1;

p1->next = NULL;

return head;

}

主函数实现

int main(void)

{

stud stus;

student* head = NULL;

student* pd; //临时指针, 用于查找函数

char choice; //用于存放用户的选择项

char name[10]; //查找,删除记录的 key

while (1)

{

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 << " ┗━━━━━━━━-━━┛" << endl;

cout << " 请输入您的选择(1–8):"; cout << endl;

int n = 0; //计数器,用于在查找时计算有没有同名学生

cin >> choice;

fflush(stdin);

if (choice == ‘8’) //安全退出

{

cout << “谢谢使用,再见” << endl;

exit(0);

}//------------------------------------------------

switch (choice)

{

case ‘1’:

head = stus.input(head);

break;//------------------------------------------------

case ‘2’:

if (head == NULL)

{

error();

break;

}

cout << setw(6) << “姓名” << setw(8) << " 学号"

<< setw(8) << “语文” << setw(8) << “数学”

<< setw(8) << “英语” << setw(13) << “总分!!!” << endl;

stus.output(head);

_getch();

break;//------------------------------------------------

case ‘3’:

if (head == NULL)

{

error();

break;

}

head = stus.stat(head);

_getch();

break;//------------------------------------------------

case ‘4’:

if (head == NULL)

{

error(); //调用函数输出错误信息

break;

}

cout << “请输入想要查找的学生姓名” << " ," << “本系统可以查找重复姓名学生” << endl;

cin >> name;

pd = head;

cout << setw(6) << “姓名” << setw(8) << " 学号"

<< setw(8) << “语文” << setw(8) << “数学”

<< setw(8) << “英语” << setw(13) << “总分!!!” << endl;

while (pd) // 循环调用函数, 用于输出多个的同名学生成绩

{

pd = stus.find(pd, name, n);

if (pd == NULL)

break;

pd = pd->next; //指针指向当前以找到的下一个节点,用于查找多个同名学生

}

_getch();

break;//------------------------------------------------

case ‘5’:

if (head == NULL)

{

error();

break;

}

cout << “请输入想要删除学生姓名” << endl;

cin >> name;

head = stus.del(head, name);

_getch();

break;//------------------------------------------------

case ‘6’:

if (head == NULL)

{

error();

break;

}

head = stus.stat(head);

head = stus.insert(head);

break;//-----------------------------------------------

case ‘7’:

if (head == NULL)

{

error();

break;

}

head = stus.clear(head);

cout << “删除表成功~” << endl;

_getch();

break;//-----------------------------------------------

default:

cout << " 对不起,您的输入有误,请重新输入。\n";

_getch();

break;

}//------------------------------------------------------

}

_getch();

return 0;

}

实现效果图

在这里插入图片描述

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

更多JVM面试整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

20200309114506633.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ4MDk2OA==,size_16,color_FFFFFF,t_70)

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

[外链图片转存中…(img-00gFJEFT-1715816962663)]

更多JVM面试整理:

[外链图片转存中…(img-ZradYWU6-1715816962663)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
相当不错的一个成绩管理系统 #include #include #include #include using namespace std; enum {SUBJECT=5};//一共五门 typedef struct { char subject[10];//科目名称 int score;//科目成绩 }markinfo; typedef struct studentnode { markinfo mark[SUBJECT]; int totalmark; char name[10];//学生姓名 studentnode * next; }studentnode; class student { studentnode * head; public: student(); int addstudent(); ~student(); int countmark(); int sortbymark(); int save(); int show(); int display(); int readfiletolist(); int searchbyname(); }; student::student() //用构造函数来初始化。 { head=new studentnode; head->next=NULL; } //1.输入学生姓名、成绩等数据,并保存在链表中。 int student::addstudent() { studentnode * p; int i; char check; system("cls"); cout<<"**********************"<<endl; cout<<"请输入学生信息:"<<endl; do { p=new studentnode; cin.ignore(); cout<name); i=0; p->totalmark=0; do { cout<mark[i].subject); cout<>p->mark[i].score; } while(p->mark[i].score>100||p->mark[i].scoretotalmark=p->totalmark+p->mark[i].score; getchar(); } while(++i!=SUBJECT); if(head->next==NULL) { head->next=p;p->next=NULL; } else { p->next=head->next; head->next=p; } cout<next; if(p==NULL) { cout<<"没有学生,请重新输入"<<endl;system("pause");return 0; } else { cout<<"***************"<<endl; cout<<"学生成绩汇总:"<<endl; while(p) { cout<<"姓名:"<name<<" 总成绩:"<totalmark<next; } } system("pause"); return 0; } //4.输出所有学生成绩到一个文件中。 int student::save() { char address[35]; int i; studentnode * p=head->next; cout<<"请输入保存的地址"<<endl; cin.ignore(); gets(address); ofstream fout; fout.open(address,ios::app|ios::out); while(p) { fout<<"*"; fout<name<<"*"; i=0; while(i!=SUBJECT) { fout<mark[i].subject<<"*"; fout<mark[i].score; i++; } //fout<next; } fout.flush(); fout.close(); cout<next; while(p) { s=p->next; delete p; p=s; } delete head; } //3.按照总成绩大小对记录进行排序 int student::sortbymark() { studentnode *move1=head->next; studentnode *move2,*max,*pre1,*pre2,*maxpre,*s=move1; if(head->next==NULL) { cout<<"没有记录,请添加"<next!=NULL;pre1=move1,maxpre=pre1,move1=move1->next,max=move1) { for(pre2=move1,move2=move1->next;move2!=NULL;pre2=move2,move2=move2->next) if(move2->totalmark>max->totalmark) { maxpre=pre2; max=move2; } if(move1->next==max) //交换max和move1。 { pre1->next=max; move1->next=max->next; max->next=move1; move1=max; } else { s=move1->next; move1->next=max->next; max->next=s; maxpre->next=move1; pre1->next=max; move1=max; } } cout<<"已经按照从大到小排序"<next; int i; if(head->next==NULL){cout<<"没有学生记录,请添加"<<endl;system("pause"); return 0;} else { while(p) { cout<<"姓名:"<name; i=1; while(i!=SUBJECT+1) { cout<<"科目:"<mark[i-1].subject; cout<<" 成绩:"<mark[i-1].score; i++; } cout<next; } } system("pause"); return 0; } //6:从文件按读取记录 int student::display() { ifstream fin; char buf[100]; char str[25]; cout<<"请输入路径及文件名:"<<endl; cin.ignore(); gets(str); fin.open(str); if(!fin) { cout<<"没有此文件"<<endl; system("pause"); return 0; } while(fin) { fin.getline(buf,sizeof(buf)); cout<<buf<<endl; } system("pause"); return 0; } //8从文件中读取数据,并将数据保存在链表中 int student::readfiletolist() { ifstream fin; int i; char str[25]; cout<<"请输入路径及文件名:"<<endl; cin.ignore(); gets(str); fin.open(str); if(!fin) { cout<<"没有此文件"<totalmark=0; fin.getline(p->name,100,'*'); i=0; while(i!=SUBJECT) { fin.getline(p->mark[i].subject,100,'*'); fin>>p->mark[i].score; p->totalmark+=p->mark[i].score; i++; } if(head->next==NULL) { head->next=p; p->next=NULL; } else { p=head->next; head->next=p; } } cout<<"信息已经保存在链表中"<next==NULL) { cout<<"没有学生,请添加或者从文件中读取"<next; char findname[10]; int i; cout<name,findname)) { cout<<"经查找,找到该生信息如下:"<<endl<<endl; cout<<"姓名:"<name; i=1; while(i!=SUBJECT+1) { cout<<"科目:"<mark[i-1].subject; cout<<" 成绩:"<mark[i-1].score; i++; } cout<next; } cout<<"没有此学生,请添加或者从文件中读取"<<endl; system("pause"); return 0; } int showmenu() { int choice; char * menu[9]={ "1:输入学生成绩保存到链表\n", "2:计算每位学生总成绩\n", "3:按照总成绩大小对记录进行排序\n", "4:输出所有学生成绩到一个文件中\n", "5:显示新输入的学生信息\n", "6:从文件中读取信息\n", "7:将文件信息保存在链表中\n", "8:根据姓名查找学生记录\n", "9:结束程序\n" }; cout<<" "<<"*****************************************************"<<endl; cout<<" *"<<" "<<"学生成绩管理系统"<<" *"<<endl; cout<<" "<<"*****************************************************"<<endl; for(choice=0;choice<9;choice++) cout<<" "<<menu[choice]; cout<<" "<<"*****************************************************"<<endl; cout<<"please choose to continue"<>choice; } while(choice>9||choice<1); return choice; } int main() { int menuitem,flag=1; student stu; while(flag) { system("cls"); menuitem=showmenu(); switch(menuitem) { case 1:{stu.addstudent();break;} case 2:{stu.countmark();break;} case 3:{stu.sortbymark();break;} case 4:{stu.save();break;} case 5:{stu.show();break;} case 6:{stu.display();break;} case 7:{stu.readfiletolist();break;} case 8:{stu.searchbyname();break;} case 9:{flag=0;break;} } } return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值