数据结构:学生管理系统链表作业1.0(存在问题待解决)

#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作为函数参数进行传递时,该怎么操作才正确!!!!!未解决!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值