#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
const int SIZE = 20;
typedef struct Student {
//char number[SIZE];
unsigned int number;
char name[SIZE];
}st;
typedef struct node {
st data;
struct node* next;
}Node,*Link;
void input(Link l) {
cout << "please enter the student's number: ";
cin >> l->data.number;
cout << "please enter the student's name : ";
cin >> l->data.name;
l->next = NULL; //!!重要 //#include <stdio.h>
}
/*
void insert(Link head) {
Link p;
Link node;
node = (Link)malloc(sizeof(Node));
input(node);
p = head;
if (p->next == NULL)
p->next = node;
else {
while (p->next != NULL)
{
if (node->data.number < p->next->data.number)
{
node->next = p->next;
break;
}
p = p->next;
}
p->next = node;
}
}
*/
bool insert(Link head) {
Link p, q;
Link node;
node = (Link)malloc(sizeof(Node));
input(node);
q = head;
p = head->next;
if (head->next == NULL)
head->next = node;
else {
while (p != NULL) {
if (node->data.number < p->data.number && node->data.number>q->data.number) {
q->next = node;
node->next = p;
return true;
}
else {
q = p;
p = p->next;
}
}
q->next = node;//q而不是p,p已经是NULL了!
}
return true;
}
void searching(Link head, char* nam) {
Link p;
p = head->next;
while (p != NULL) {
if (p->data.name == nam) {
cout << "查找到该学生信息如下:\n" << "name:" << p->data.name << endl
<< "number:" << p->data.number << endl;
break;
}
else
p = p->next;
}
cout << "未查找到该学生的相关信息\n";
}
void show(Link head, unsigned int num) {
Link p;
p = head->next;
while (p != NULL) {
if (p->data.number == num) {
cout << "找到该学生相关信息如下:\n";
cout << "name:" << p->data.name << endl
<< "number:" << p->data.number << endl;
break;
}
else {
p = p->next;
}
}
if (p == NULL)
cout << "未查找到该学生的相关信息!\n";
}
void showall(Link head) {
Link p;
p = head->next;
cout << "找到所有学生相关信息如下:\n";
while (p != NULL) {
cout << "name:" << p->data.name << endl
<< "number:" << p->data.number << endl;
p = p->next;
}
cout << "所有学生信息显示完毕!\n";
}
void modifyname(Link head, char nam[SIZE]) {
Link p;
p = head->next;
//const char* nam = new char[SIZE];
while (p != NULL) {
if (p->data.name == nam) {
cout << "请输入修改后的学生姓名:\n";
cin >> p->data.name;
}
else {
p = p->next;
}
}
cout << "修改失败,未找到该学生!\n";
}
void delete_(Link head, unsigned int num) {
Link p, q;
q = head;
p = head->next;
if (head->next == NULL) {
cout << "未查找到该学生信息,且该表为空表!删除失败\n";
}
else {
while (p != NULL) {
if (p->data.number == num) {
q->next = p->next;
free(p);
cout << "删除成功!\n";
break;
}
else {
q = p;
p = p->next;
}
}
if(p==NULL)
cout << "未查找到该学生的相关信息!\n";
}
}
int total_num(Link head) {
Link p;
p = head->next;
int count = 0;
while (p != NULL) {
count++;
p = p->next;
}
return count;
}
void clearLink(Link head) {
Link q, p;
q = head;
p = head->next;
while (p != NULL) {
free(q);
q = p;
p = p->next;
}
cout << "DONE!" << endl;
}
int main() {
Link head;
head = (Link)malloc(sizeof(Node));
head->next = NULL;
int n;
cout << "您需要输入多少学生信息?:";
cin >> n;
for (int i = 0; i < n; i++) {
insert(head);
}
cout << "请输入您要查找的学生学号:";
unsigned int num1;
cin >> num1;
show(head, num1);
/*
cout << "请输入您要查找的学生姓名:";
char* nam1 = new char[SIZE];
cin >> nam1;
searching(head, nam1);
cout << "请输入要修改的学生的姓名:";
char nam2[SIZE];
cin >> nam2;
modifyname(head, nam2);*/ //字符串作为参数传递时总是出现问题!!!!!!!!!!!!哪里出了问题?
cout << "请输入要删除的的学生的学号:";
unsigned int num2;
cin >> num2;
delete_(head, num2);
cout << "所有学生信息如下:\n";
showall(head);
cout << "共计" << total_num(head) << "名学生!\n";
clearLink(head);
return 0;
}
char*name作为函数参数进行传递时,该怎么操作才正确!!!!!未解决!!