用单链表做学生管理系统,第一个学生的学生的信息删不了,求教!
/*************************************************************************
> File Name: student.c
> Author: SunTeng
> Description:
> Created Time: 2018年10月24日 星期三 19时16分59秒
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
char name[20];
int num;
int grade;
char tel[20];
struct student* next;
}STU;
STU* creatstu()
{
STU* head = NULL;
head = (STU*)malloc(sizeof(STU));
if(NULL == head)
{
return NULL;
}
printf("学号\t姓名\t成绩\t电话\n");
scanf("%d%s%d%s",&head->num,head->name,&head->grade,head->tel);
//getchar();
head->next = NULL;
STU* tmp = head;
while(1)
{
STU* st = (STU*)malloc(sizeof(STU));
if(st == NULL)
{
return NULL;
}
printf("学号\t姓名\t成绩\t电话\n");
scanf("%d%s%d%s",&st->num,st->name,&st->grade,st->tel);
getchar();
tmp->next = st;
tmp = st;
printf("按空格退出,按其他键继续录入学生信息!!\n");
if(getchar() == ' ')
{
break;
}
}
tmp->next = NULL;
return head;
}
void Print(STU* head)
{
STU* temp = head;
printf("name\t num\t grade\t tel\n");
while(temp != NULL)
{
printf("%d\t %s\t %d\t %s\n",temp->num,temp->name,temp->grade,temp->tel);
temp = temp->next;
}
printf("\n");
}
int stuCount(STU* head)
{
STU* tmp = head;
int nCount = 0;
while(NULL != tmp)
{
nCount++;
tmp = tmp->next;
}
return nCount;
}
STU* add(STU* head)
{
STU* stu = (STU*)malloc(sizeof(STU));
if(NULL == stu)
{
return head;
}
if(NULL == head)
{
head = stu;
head->next = NULL;
return head;
}
printf("学号\t姓名\t成绩\t电话\n");
scanf("%d%s%d%s",&stu->num,stu->name,&stu->grade,stu->tel);
int i = 0;
STU* tmp = head;
for(i = 1 ; i < stuCount(head);i++)
{
tmp = tmp->next;
}
tmp->next = stu;
stu->next = NULL;
return head;
}
STU* Delete(STU* head)
{
int num3;
printf("输入你要删除学生的学号:");
scanf("%d",&num3);
STU* temp1 = head;
if(temp1->num == num3) //这里的第一个学生的信息删不了,其他都好着。 求教!!
{ // 删除第一个结点
head = temp1->next; //
//
return head; //
} //
while(temp1->next->num != num3)
{
temp1 = temp1->next;
}
if(temp1->next == NULL)
{
temp1->next = NULL;
free(temp1);
return head;
}
STU* ss = temp1->next;
temp1->next = ss->next;
free(ss);
ss->next = NULL;
return head;
}
STU* Modify(STU* head)
{
STU* Modstu = head;
int modnum,chose = 0,i;
printf("输入要修改的学生学号:");
scanf("%d",&modnum);
for(i = 0;i < stuCount(head);i++)
{
if(Modstu->num == modnum)
{
printf("name\t num\t grade\t tel\n");
printf("%d\t %s\t %d\t %s\n", Modstu->num, Modstu->name, Modstu->grade, Modstu->tel);
break;
}
Modstu = Modstu->next;
}
if(i == stuCount(head))
{
printf("NOT FOUND!");
return head;
}
else
{
while(chose!=5) // 选择要修改的信息
{
printf("1.modify name\n2. Modify num\n3. modify grade\n4. modify tel\n5. Exit \nInput Select Function:");
scanf("%d",&chose);
switch(chose)
{
case 1:printf("enter after updata name:");
scanf("%s",Modstu->name);
break;
case 2:printf("enter after updata num:");
scanf("%d",&Modstu->num);
break;
case 3:printf("enter after updata grade:");
scanf("%d",&Modstu->grade);
break;
case 4:printf("enter after updata tel:");
scanf("%s",Modstu->tel);
break;
default: break;
}
if(chose==5)
break;
else
{
printf("name\t num\t grade\t tel\n");
printf("%s\t %d\t %d\t %s\n",Modstu->name,Modstu->num,Modstu->grade,Modstu->tel);
}
}
}
}
STU* find(STU* head)
{
int i = 0,findnum;
printf("输入要查找的学生学号:");
scanf("%d",&findnum);
STU* findstu = head;
for(i = 0;i < stuCount(head);i++)
{
if(findstu->num == findnum)
{
printf("name\t num\t grade\t tel\n");
printf("%d\t %s\t %d\t %s\n", findstu->num, findstu->name, findstu->grade, findstu->tel);
break;
}
findstu = findstu->next;
}
if(i == stuCount(head))
{
printf("NOT FOUND!");
return head;
}
}
int main(int argc,char *argv[])
{
int choose;
STU* head = creatstu();
while(1)
{
printf("\n");
printf("*************GEC Live System**************\n");
printf("*************ACCOINT OPERATE**************\n");
printf("* 1: add Item *\n");
printf("* 2: Delete Item *\n");
printf("* 3: Modify Item *\n");
printf("* 4: Print Item *\n");
printf("* 5: Find Item *\n");
printf("* 其他:Exit *\n");
printf("******************************************\n");
printf("Input Select Function:");
scanf("%d",&choose);
switch(choose)
{
case 1:add(head); continue;
case 2:Delete(head); continue;
case 3:Modify(head); continue;
case 4:Print(head); continue;
case 5:find(head); continue;
default: exit(0);
}
return 0;
}
return 0;
}