c语言基于链表的学生信息管理系统(源代码)

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct Student)

struct Student
{
 int nNum;
 float fScore;
 struct Student *next;    //保存一个 Student类型结构的地址
};

struct Student *addStu (struct Student *);    //函数原型
void displayStu (struct Student*);
struct Student *deleteStu (struct Student *); 

int main()
{
 int num;
 struct Student *stuList = NULL;
 struct Student *first ;          //创建一个指向结构的指针
 
 while(1)
 {
  printf("1.Add Student Information\n");
  printf("2.Display Student Information\n");
  printf("3.Delete Student Information\n");
  printf("0.Exit\n");
  printf("Please input menu item:");
  scanf("%d",&num);
  
  if(num == 1)
  stuList = addStu(stuList);
  if(num == 2)
  displayStu(stuList);
  if(num == 3)
  stuList = deleteStu(stuList);
  if(num == 0)
  return 0;
 }
}
struct Student *addStu (struct Student *head)
{
 struct Student *phead;
 struct Student *p;

 phead = head;
 p = (struct Student*) malloc(LEN);
 
 printf("Add Student Information\n");
 puts("Please input student ID:");
 scanf("%d", &p->nNum);
 puts("Please input grade:");
 scanf("%f", &p->fScore);
 printf("Succeed!\n\n");

 if (head == NULL)
 {
  head = p;
  p->next = NULL;
  phead = head;  //head为第一个节点
 }
 else
 {
  while (head->next != NULL)
  {
   head = head->next;
  }
  head->next = p;
  head->next->next = NULL;
 }

 return phead;
}

void displayStu(struct Student *head)
{
 struct Student *p;

 p = head;
 printf("Student ID     Grade  \n");

 while (p != NULL)
 {
  printf("%-10d%10.1f\n", p->nNum, p->fScore);
  p = p->next;   //获取下一个节点
 }
 printf("\n");
}

struct Student *deleteStu (struct Student *head)
{
 struct  Student *pCur, *pPre;
 struct Student *p;
 pCur = (struct Student*) malloc(LEN);
 pPre = (struct Student*) malloc(LEN);
 p = (struct Student*) malloc(LEN);

 puts("Please input student ID:");
 scanf("%d", &p->nNum);

 pCur = head;

 if (pCur == NULL)
 {
  printf("NULL!\n");
  printf("\n");
  return NULL;
 }

 while (pCur != NULL &&p->nNum != pCur->nNum)
 {
  pPre = pCur;
  pCur = pCur->next;
 }

 if (pCur != NULL)
 {
  if (pCur == head)
  {
   head = pCur->next;
  }
  else
  {
   pPre->next = pCur->next;
  }
  free(pCur);
  printf("Succeed!\n\n");
 }
 else
 {
  printf("This student ID dose not exist.!\n");
  printf("\n");
 }

 return head;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值