#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#define Null 0
//存储结构体定义
struct student
{
int num;
char name[99];
int mark;
struct student *next;
};
//最初显示界面
void print()
{
printf(“======开始新加入数据请按n========\n”);
printf(“======要插入学生数据请按i========\n”);
printf(“======要删除学生数据请按d========\n”);
printf(“======要查询学生数据请按s========\n”);
printf(“======退出系统请按x========\n”);
}
//初始化的输入函数
struct student *Init (int n)
{
int i;
struct student *head,*p,*s;
for(i=1;i<=n;i++)
{
printf(“学号\t\t姓名\t\t成绩\n”);
if(i==1)
{
p=new struct student;
scanf(“%d”,&p->num);
scanf(“%s”,&p->name);
scanf(“%d”,&p->mark);
head=p;
}
else
{
s=new struct student;
scanf(“%d”,&s->num);
scanf(“%s”,&s->name);
scanf(“%d”,&s->mark);
p->next=s;
p=s;
}
}
s->next=Null;
return head;
}
//带位置选择的链表节点插入函数
void Insert(struct student *head)
{
struct student *p,*pi;
int xuehao;
printf(“请问要在哪个学生后面插入数据(输入学号):”);
scanf(“%d”,&xuehao);
pi=new struct student;
p=head;
printf(“学号\t\t姓名\t\t成绩\n”);
scanf(“%d”,&pi->num);
scanf(“%s”,&pi->name);
scanf(“%d”,&pi->mark);
//检测空节点
if (head==Null)
{
head=pi;
pi->next=Null;
}
else
{
while((p->num!=xuehao)&&(p->next!=Null))
{
p=p->next;
}
if(p->next!=Null)
{
pi->next=p->next;
p->next=pi;
}
else
{
p->next=pi;
pi->next=Null;
}
}
}
//删除某节点的函数
struct student *Delete(struct student *head,int n)
{
struct student *p,*q;
p=head;
if(head==Null)
{
printf(“没有学生的资料要删除!\n”);
return head;
}
while(p->num!=n&&p->next!=Null)
{
q=p;
p=p->next;
}
if(p->num==n)
{
if(p==head)
{
head=p->next;
}
else
{
q->next=p->next;
delete p;
}
}
else
{
printf(“找不到相应的学生资料!\n”);
return head;
}
}
//查找链表中某节点数据的函数
void Serch(struct student *head)
{
printf(“======按学号查找请按1======\n”);
printf(“======按姓名查找请按2========\n”);
printf(“======按成绩查找请按3========\n”);
char xingming[5];
int xuehao,chengji,choose;
struct student *p;
scanf(“%d”,&choose);
switch (choose)
{
case 1:
{
p=head;
printf(“请输入要查找学生的学号:”);
scanf(“%d”,&xuehao);
while(p->num!=xuehao&&p->next!=Null)
{
p=p->next;
}
if(p->num==xuehao)
{
printf(“===学生资料===\n”);
printf(“学号 姓名 成绩\n”);
printf(“%d %s %d\n”,p->num,p->name,p->mark);
}
if(p->num!=xuehao&&p->next==Null)
{
printf(“找不到相关学生信息!\n”);
}
}break;
case 2:
{
p=head;
printf(“请输入要查找学生的姓名:”);
scanf(“%s”,&xingming);
while(p->name!=xingming&&p->next!=Null)
{
p=p->next;
}
if(p->name==xingming)
{
printf(“===学生资料===\n”);
printf(“学号 姓名 成绩\n”);
printf(“%d %s %d\n”,p->num,p->name,p->mark);
}
if(p->name!=xingming&&p->next==Null)
{
printf(“找不到相关学生信息!\n”);
}
}break;
case 3:
{
p=head;
printf(“请输入要查找学生的成绩:”);
scanf(“%d”,&chengji);
while(p->mark!=chengji&&p->next!=Null)
{
p=p->next;
}
if(p->mark==chengji)
{
printf(“===学生资料===\n”);
printf(“学号 姓名 成绩\n”);
printf(“%d %s %d\n”,p->num,p->name,p->mark);
}
if(p->mark!=chengji&&p->next==Null)
{
printf(“找不到相关学生信息!\n”);
}
}break;
default:break;
}
}
//退出系统
void Exit()
{
exit(0);
}
//列出全体数据
void list(struct student *head)
{
struct student *p;
p=head;
printf(“===学生资料===\n”);
printf(“学号 姓名 成绩\n”);
//以尾节点的Null为输出终止标志
while(p!=Null)
{
printf(“%d\t\t%s\t\t%d\n”,p->num,p->name,p->mark);
p=p->next;
}
}
//主函数
int main()
{
char ch;
struct student *head;
print();
while((ch=getchar())!=’X'||(ch=getchar())!=’x')
{
switch (ch)
{
case ‘n’:
{
int n;
printf(“请输入打算记录的学生个数:\n”);
scanf(“%d”,&n);
head=Init(n);
list(head);
}break;
case ‘i’:
{
Insert(head);
list(head);
}break;
case ‘d’:
{
int num;
printf(“请输入要删除学生的学号:”);
scanf(“%d”,&num);
head=Delete(head,num);
list(head);
}break;
case ‘s’:
{
Serch(head);
}break;
case ‘x’:Exit();break;
default:break;
}
}
return 0;
}
希望能帮我精简点 最好是用for把switch换掉
>> 本文固定链接: http://www.vcgood.com/archives/2463