麻烦了!!! 没有写什么注释 , 这个毛病要改改! 呵呵 , 还好代码比较简单
[ 本帖最后由 missu_1314 于 2012-2-14 15:20 编辑 ]
[ 本帖最后由 missu_1314 于 2012-2-14 15:20 编辑 ]
2012-02-14 15:16
2012-02-14 15:35
程序代码:#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
/*
建的是带头结点为空的单链表。
下面是我提的几点建议:
当函数有返回值的时候,你就没添加函数返回值类型声明
写这种模块式的程序,记得要简化函数的功能,尽可能的让某个函数完成某项单一的功能,这样容易发现问题,也容易解决。
先从框架做起,然后再逐步细化下去。
你所提到的问题还是在函数参数传值与传址的问题,这在每本讲c的书上都会在函数那章有说明的。
有时候你都不确定你用的指针指向了哪里,建议多在纸上画画。
某些函数还可以进一步简化,增加联系,可以尝试去修改。
*/
typedef struct Student
{
char name[20];
char mark[5]; //输入的习惯性策略都是字符串
struct Student *next;
} Node, *node;
node LHead; //头结点
void Search_All(void) //链表整体输出
{
node p;
p = LHead -> next;
while(p != NULL)
{
printf("姓名:%s\t分数:%s\n", p->name, p->mark);
p = p->next;
}
}
void Search_Single(void) //单一元素查询
{
char name[20];
node p;
p = LHead -> next;
printf("请输入你要查询学生的姓名:");
gets(name);
while (p != NULL)
{
if (strcmp(name,p->name) == 0)
{
printf("该学生的分数为:%s\n", p->mark);
break;
}
p = p->next;
}
if (NULL == p)
printf ("没有找到该学生!\n");
}
void Del_Single(void) //删除单一元素
{
node p, q, head;
head = p = LHead->next;
char name[20];
printf("请输入你要删除学生的姓名:");
gets(name);
while (p != NULL)
{
if (strcmp(name, p->name) == 0)
{
//删除节点可以分2种情况,一是头结点,二是其他结点
if(head == p)
{
LHead->next = p->next;
}
else
{
q->next = p->next;
}
free(p);
printf("该学生记录已删除\n");
break;
}
q = p;
p = p->next;
}
if (p == NULL)
printf ("没有找到该学生!\n");
}
void Add_Single(void) //增加新的学生信息,根据姓名排序
{
node p, q, old, head;
head = q = LHead -> next;
p = (node)malloc(sizeof(Node));
if (p == NULL)
{
printf("内存分配失败!");
exit(1);
}
printf("输入增加的学生姓名:");
gets(p->name);
printf("输入增加的学生分数:");
gets(p->mark);
//插入信息也有四种情况,一种是空表情况,二种是插入表头,三种是插入表中,四是插入表尾
if (NULL == q)
{
LHead -> next = p;
p -> next = NULL;
}
else
{
while(q != NULL)
{
if (strcmp(p->name, q->name) == 0)
{
//此时所输账号相同
printf("此学生姓名早已存在。\n");
break;
}
else if(strcmp(p->name, q->name) < 0)
{
if(head == q)
{
//放表头
LHead -> next = p;
p ->next = q;
}
else
{
//放表中
old->next = p;
p->next = q;
}
break;
}
old = q;
q = q->next;
}
if(q == NULL)
{
//放表尾
old -> next = p;
p -> next = NULL;
}
}
}
int menu(void) //显示主菜单函数
{
char s[20];
int c;
system("cls");
printf("\t\t*****************学生信息管理系统*****************\n");
printf("\t\t*\t\t|1.学生信息录入 *\n");
printf("\t\t*\t\t|2.学生信息浏览 *\n");
printf("\t\t*\t\t|3.学生信息查询 *\n");
printf("\t\t*\t\t|4.学生信息删除 *\n");
printf("\t\t*\t\t|5.退出系统 *\n");
printf("\t\t*****************学生信息管理系统*****************\n\n\n");
printf("\t\t请输入以上序号进行选择:\n");
do{
gets(s);
c = atoi(s);
}while(c<0||c>8);
return c;
}
int main(void)
{
LHead = (node)malloc(sizeof(Node));
LHead ->next = NULL;
while(1)
{
switch(menu())
{
case 1:Add_Single();system("pause");//录入
break;
case 2:Search_All();system("pause");//浏览
break;
case 3:Search_Single();system("pause");//查询
break;
case 4:Del_Single();system("pause");//删除
break;
case 5:exit(0);
}//end switch
}//end while
system("pause");
return 0;
}

2012-02-14 20:30
2012-02-14 22:56
2012-02-15 09:07