简陋版学生成绩管理系统

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define LEN  100
  4. #define OVERFLOW  -2
  5. #define ERROR 0
  6. typedef int Status;
  7. typedef struct {
  8.  struct student * elem;
  9.  int len;
  10.  int listsize;
  11. }list;
  12.  typedef struct student {
  13.  char name[10];
  14.  int grade;
  15. }STUDENT;
  16.  //增加
  17.  Status  ListInsert(list &L, int i) {
  18.   if (i<1 || i>L.len + 1)
  19.    return ERROR;
  20.   if (L.len >= L.listsize)
  21.    L.elem = (STUDENT*)malloc((LEN + 1) * sizeof(STUDENT));
  22.   if (!L.elem)  exit(OVERFLOW);
  23.   STUDENT* q, * p;
  24.   q = &L.elem[i - 1];
  25.   for (p = &L.elem[L.len - 1]; p >= q; p--)
  26.    *(p + 1) = *p;
  27.   printf("请输入要添加的名字及成绩\n");
  28.   scanf_s("%s", q->name,10);
  29.   scanf_s("%d",& q->grade);
  30.   ++L.len;
  31.  }
  32.  //删除
  33.  Status ListDelete(list &L, int i)
  34.  {
  35.   if (i<1 || i>L.len)
  36.    return ERROR;
  37.   STUDENT* p, * q, e;
  38.   p = &L.elem[i - 1];
  39.   e = L.elem[i - 1];
  40.   q = L.elem + L.len - 1;
  41.   for (; p <= q; p++)
  42.    *p = *(p + 1);
  43.   L.len--;
  44.  }
  45.  //修改
  46.  Status exchange1(list& L)
  47.  {
  48.   int i;
  49.   printf("请输入修改的位置为第几个\n");
  50.   scanf_s("%d", &i);
  51.   if (i<1 || i>L.len)
  52.    return ERROR;
  53.   printf("要修改为的名字是\n");
  54.   scanf_s("%s", (L.elem+i-1)->name,10);
  55.  }
  56.  Status exchange2(list& L, int i, int& e)
  57.  {
  58.   if (i<1 || i>L.len)
  59.    return ERROR;
  60.   
  61.  ( L.elem + i - 1)->grade = e;
  62.  }
  63. int main()
  64. {
  65.  list m;
  66.  m.elem = (STUDENT*)malloc(LEN * sizeof(STUDENT));
  67.  m.listsize = LEN;
  68.  *m.elem = { "xiaoming",88 };
  69.  *(m.elem+1) = {"xiaohong",90};
  70.  *(m.elem+2) = { "xiaolin",85};
  71.  *(m.elem +3) = {"xiaofang",70 };
  72.  *(m.elem + 4) = { "xiaoli",93 };
  73.  *(m.elem + 5) = { "xiaohuo",90 };
  74.  m.len = 6;
  75.  int a = 0,x;
  76.  for (a = 0; a < m.len; a++)
  77.  {
  78.   printf("%s ", m.elem[a].name);
  79.   printf("%d\n", m.elem[a].grade);
  80.  }
  81.  printf("1、增加数据\n2、删除数据\n3、修改成绩\n4、修改名字\n 选择你要进行的操作数字:\n");
  82.  scanf_s("%d", &x);
  83.  int i, e;
  84.  switch (x)
  85.  {
  86.  case 1: {printf("请输入要添加的位置\n");
  87.   scanf_s("%d", &i);
  88.   ListInsert(m, i); }
  89.     break;
  90.  case 2: {printf("请输入要删除的位置\n");
  91.   scanf_s("%d", &i);
  92.   ListDelete(m, i); }
  93.     break;
  94.  case 3: {printf("请输入修改的位置为第几个,要修改为的成绩\n");
  95.   scanf_s("%d %d", &i, &e);
  96.   exchange2(m, i, e); }
  97.     break;
  98.  case 4: exchange1(m);
  99.   break;
  100.  default:printf("error\n");
  101.   break;
  102.  }
  103.     printf("最终数据情况为\n");
  104.  for (a = 0; a < m.len; a++)
  105.  {
  106.   printf("%s ", m.elem[a].name);
  107.   printf("%d\n", m.elem[a].grade);
  108.  }
  109.  return 0;
  110. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值