一、实验内容:
设计一个学生信息管理系统,学生对象至少要包含:学号、姓名、成绩等信息。要求实现以下功能:
1、查找:分别给定学生学号、姓名,能够查找到学生的基本信息(要求至少实现改进后的顺序查找算法);
2、排序:分别按学生的学号、成绩进行排序(要求至少用实现直接插入排序、冒泡排序、简单选择排序算法)。
二、实验代码:
//list.h头文件
#include<iostream>
#include<string>
using namespace std;
//202056228杨丽花
struct student
{
int num; //学号
char name[20]; //姓名
char banji[20]; //班级
int c; //C语言课程成绩
int datastruct; //数据结构课程成绩
};
struct queue
{
struct student a[8];
int lenth;
};
class list
{
private:
queue d;
public:
int seqsearch(list, char*);
void insertsort(list);
void selectsort(list);
void bubblesort(list);
list();
void display(list);
void show(int);
};
//list.cpp源文件
#include "list.h"
//202056228杨丽花
list::list()
{
struct student e[8] = {
{1,"王一","2020562",85,76},
{2,"王二","2020562",78,77},
{3,"王三","2020562",90,79},
{4,"王四","2020562",75,86},
{5,"王五","2020562",60,71},
{6,"王六","2020562",58,68},
{7,"王七","2020562",95,89},
{8,"王八","2020562",45,60},
};
for (int i = 0;i < 8;i++)
d.a[i] = e[i];
}
void list::show(int i)
{
if (i == -1)
cout << "sorry not found!!" << endl;
else
{
cout << "学号" <<"姓名" << "班级" << "c++" << "数据结构\n";
cout << "" << d.a[i].num << " ";
cout << d.a[i].name << " ";
cout << d.a[i].banji << " ";
cout << d.a[i].datastruct << " ";
cout << d.a[i].c << endl;
}
}
void list::display(list l)
{
cout << "学号" <<" "<< "姓名" << " " << "班级" <<" "<< "c++" << " " << "数据结构\n";
for (int i = 0;i < 8;i++)
{
cout << "" << l.d.a[i].num << " ";
cout << l.d.a[i].name << " ";
cout << l.d.a[i].banji << " ";
cout << l.d.a[i].datastruct << " ";
cout << l.d.a[i].c << endl;
}
}
int list::seqsearch(list l, char name[20])//顺序查找
{
for (int i = 0;i < 8;i++)
if (strcmp(l.d.a[i].name, name) == 0)
return i;
return -1;
}
void list::insertsort(list l)//直接插入排序
{
struct student n;
for (int i = 1;i < 8;i++)
{
n = l.d.a[i];
int j = i - 1;
while (j >= 0 && strcmp(n.name, l.d.a[j].name) < 0)
{
l.d.a[j + 1] = l.d.a[j];
j--;
}
l.d.a[j + 1] = n;
}
display(l);
}
void list::selectsort(list l)//简单选择排序
{
for (int i = 0;i < 7;i++)
{
int j = i;
for (int k = j;k < 8;k++)
{
if (l.d.a[j].c < l.d.a[k + 1].c)
j = k + 1;
}
if (j != i)
{
student s = l.d.a[i];
l.d.a[i] = l.d.a[j];
l.d.a[j] = s;
}
}
display(l);
}
void list::bubblesort(list l)//冒泡排序
{
for (int i = 7;i > 0;i--)
for (int j = 0;j < i;j++)
{
if (l.d.a[j].datastruct > l.d.a[j + 1].datastruct)
{
student d = l.d.a[j];
l.d.a[j] = l.d.a[i + 1];
l.d.a[j + 1] = d;
}
}
display(l);
}
//main.cpp文件
// 实验五.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include "list.h"
#include<string>
#include<cstring>
#pragma warning(disable:4996)
using namespace std;
using std::strcpy;
//202056228杨丽花
int main()
{
list l;
cout << "顺序查找姓名为王七的学生\n";
char* temp = new char[10];
const char* sb = "王七";
strcpy( temp,sb);
int i = l.seqsearch(l,temp);
l.show(i);
cout << endl;
cout << "直接插入排序对姓名进行排序:\n";
cout << "排序前的结果:\n";
l.display(l);
cout << "排序后的结果:\n";
l.insertsort(l);
cout << endl;
cout << "简单选择排序对c语言成绩进行排序:\n";
cout << "排序前的结果:\n";
l.display(l);
cout << "排序后的结果:\n";
l.selectsort(l);
cout << endl;
cout << "冒泡排序对数据结构成绩进行排序:\n";
cout << "排序前的结果:\n";
l.display(l);
cout << "排序后的结果:\n";
l.bubblesort(l);
cout << endl;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件