函数与程序结构(C语言结课作业)代码篇

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
/******定义结构体*******/
typedef struct stud
{
    char id[13];
    char name[21];
    int score1,score2,score3;
    int sum;
    struct stud *next;
}Lnode, *LinkList;
int m=sizeof(Lnode);
/*******函数声明*******/

void create(LinkList L);
void print(LinkList L);
void listdelete(LinkList L);
void listinsert(LinkList L);

/***************主函数**************/

int main()
{
    LinkList head;
    int select;
    head=(LinkList)malloc(m);
    head->next=NULL;
    while(1)
    {
        printf("=================\n");
        printf("*欢迎进入学生信息管理系统*\n");
        printf("1:创建链表\n");
        printf("2:插入元素\n");
        printf("3:删除元素\n");
        printf("4:显示元素\n");
        printf("0:退出系统\n");
        printf("================\n");
        printf("请选择菜单项\n");
        scanf("%d",&select);
        switch(select)
        {
            case 1:
                create(head); break;

            case 2:
                listinsert(head);break;

            case 3:
                listdelete(head);break;

            case 4:
                print(head);
                printf("\n");
                break;
            case 0:
                exit(0);

        }
    }
    return 0;
}
/***************输出列表********************/
void print(LinkList L)
{
    LinkList p;
    p=L->next;
    while(p)
    {
        printf("%-20s%-8s%-8d%-8d%-8d%-9d\n",p->id,p->name,p->score1,p->score2,p->score3);
        p=p->next;
    }
}
/**********************建立列表********************/
void create(LinkList L)
{
    LinkList rear,s;
    rear=L;
    char id[13],name[21];
    int score1,score2,score3;
    printf("输入若干整数,输入#表示输入结束\n");
    while(scanf("%s",id),id[0]!='#')
    {
        scanf("%s%d%d%d",name,&score1,&score2,&score3);
        s=(LinkList)malloc(m);
        s->score1=score1;
        s->score2=score2;
        s->score3=score3;
        s->sum=s->score1+s->score2+s-score3;
        strcpy(s->id,id);

        rear->next=s;
        rear=s;
    }
    rear->next=NULL;
    printf("\n新创建链表中学生信息为: \n");
    print(L);
    printf("\n");
}

/*****************插入列表*****************/

  void listinsert(LinkList L)
  {
    LinkList s,p=L;

    int flag;
    flag = 0;
    printf("当前链表学生信息: \n");
    print(L);
    printf("\n");
    printf("请输入待添加学生信息: \n");
    s=(LinkList)malloc(m);
    scanf("%s%s%d%d%d",s->id,s->name,&s->score1,&s->score2,&s->score3);
    s->sum=s->score1+s->score2+s->score3;
    while(p)
    {
        if(strcmp(s->id,p->id)==0)
        {
            printf("学号已有,无法添加\n\n");
            flag=1;
            break;
        }
        p=p->next;
    }
    if(flag==1)
    {
        printf("\n");
        print(L);
        printf("\n");


    }
    if(flag==0)
    {
        p = L;
        while(p->next!=NULL)
        {
            if(strcmp(s->id,p->next->id)< 0)
                break;
            p=p->next;
        }
        s->next=p->next;
        p->next =s;
        print(L);
        printf("\n");

    }

  }


  /***************删除列表**************/


  void listdelete(LinkList L)
  {
      LinkList q,p=L;
      char id[13];
      int flag;
      flag=0;
      printf("当前链表学生信息为: \n");
      print(L);
      printf("\n请输入待删学生学号信息: \n");
      scanf("%s",id);
      while(p->next)
      {
          if(strcmp(p->next->id,id)==0)
          {
              flag = 1;
              break;
          }
          p=p->next;
      }
      if(flag==0)
      {
          printf("查无此号,无法删除\n");
          printf("\n");

      }
      else
      {
          printf("待删除学生信息为: \n");
          printf("%-20s%-8s%-8d%-8d%-8d%-9d\n",p->next->id,p->next->name,p->next->score1,p->next->score2,p->next->score3);
          printf("\n");
          q = p->next;
          p->next = q->next;
          free(q);

      }
      printf("链表修改后的学生信息为: \n");
      print(L);
      printf("\n");
  }

不知道为何在上一篇代码粘贴不上去,只能在下一篇展示。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值