#include <cstdlib>
#include <cstring>
#include<iostream>
#include<cctype>
using namespace std;
#include<string>
typedef struct Node
{
char name[10];
int num;
int age;
struct Node* next;
}lnode;
//创建一个学生链表
struct Node* createlist()
{
lnode *list = new lnode;
list->next = NULL;
return list;
}
//创建一个学生的结点
struct Node* createnode(char *newname, int newnum, int newage)
{
lnode *node1 = new lnode;
strcpy_s(node1->name, newname);
node1->age = newage;
node1->num = newnum;
node1->next = NULL;
return node1;
}
//在尾部插入一个学生的信息
void insertback(lnode *list, char *newname, int newnum, int newage)
{
lnode *newnode = createnode(newname, newnum, newage);
//找到尾结点
lnode *temp = list;//移动的结点用来找到尾结点
while (temp->next != NULL) //一直移动到最后一个结点
{
temp = temp->next;
}
newnode->next = NULL;
temp->next = newnode;
}
//查找学生的信息
void searchinfo(lnode *list, char *name)
{
lnode *temp = list->next;
if (temp == NULL)
{
cout << "没有学生信息\n";
return;
}
while (strcmp(temp->name, name) != 0)
{
if (temp->next == NULL)
{
cout << "没有此学生的信息\n";
return;
}
temp = temp->next;
}
cout << "姓名" << temp->name << endl;
cout << "编号:" << temp->num << endl;
cout << "年龄 :" << temp->age << endl;
}
//删除学生信息
void deleteinfo(lnode *list, char *num)
{
lnode *temp = list; //用来找到要删除的前面一个结点
lnode *p = list->next;//指向需要删除的结点
if (p == NULL)
{
cout<<"没有学生信息\n";
return;
}
int sumint=0;
for (int i = 0; i <strlen(num); i++)
{
char temp_char = num[i];
int temp_int = temp_char - '0';
sumint=sumint*10+temp_int;
}
while (p->num!=sumint)
{
if (p->next == NULL)
{
cout << "没有此学生的信息\n";
return;
}
temp = temp->next;
p = p->next;
}
temp->next = p->next;
cout << "删除成功" << endl;
free(p);
}
void print(lnode *list)//打印所有的信息
{
lnode *temp = list->next;
if (temp == NULL)
{
cout << "没有学生信息\n";
return;
}
while (temp)
{
cout << "姓名" << temp->name << endl;
cout << "编号:" << temp->num << endl;
cout << "年龄 :" << temp->age << endl;
temp = temp->next;
}
}
void menu()//菜单界面
{
cout<<"****************************************\n";
cout<<"* 1、插入学生信息 *\n";
cout<<"* 2、查找学生信息 *\n";
cout<<"* 3、打印所有信息 *\n";
cout<<"* 4、删除学生信息 *\n";
cout<<"* 5、退出管理系统 *\n";
cout<<"****************************************\n";
}
int choice()//选择需要的操作
{
loop:
char *a = new char[100];
cout << "请选择您要执行的操作:\n";
cin >>a;
for (int i = 0; i<100; i++)
{
int b = a[i] - '0';
if (b < 1 || b > 5)
{
cout << "您的输入有误,请重新输入:\n";
goto loop;
}
else
{
if (a[1] == NULL)
{
return a[0] - '0';
}
}
}
}
void work(lnode *student)
{
menu();
int a = choice();
switch (a)
{
case 1:
{
char name[10] = "0";
int num = 0,age=0;
cout<<"输入信息姓名,编号,年龄:\n";
cin >> name >> num >> age;
insertback(student, name, num, age);
}break;
case 2:
{
char searchname[10] = "0";
cout << "请输入你要查找的学生的名字:\n";
cin >> searchname;
searchinfo(student, searchname);
}break;
case 3:print(student);
break;
case 4:
{
char *deletenum=new char[10];
cout<<"请输入你要删除的学生的编号:\n";
cin >> deletenum;
deleteinfo(student, deletenum);
}break;
case 5:
cout << "再见" << endl;
exit(0);
break;
default: cout << "输入错误\n";
break;
}
}
int main()
{
lnode *student = createlist();
while (1)
{
work(student);
}
system("pause");
return 0;
}
c++链表学生管理系统,比较稳定
最新推荐文章于 2023-03-11 23:45:48 发布