/*
实现学生管理系统
学生信息:
学号
姓名
班级
电话号
功能:
增加 删除 修改 查看
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#define N 32
typedef struct
{
int id;
char name[N];
int clas;
long int tel;
} STU_t;
static void stu_show(STU_t *p, int n);
static int stu_del(STU_t **p, int *n, int id);
static int stu_add(STU_t **p, int *n, int *id, char *name, int *class, long int *tel );
static int stu_change(STU_t **p,int *n, int id, long int *tel);
enum {ADD=1, DEL=2, SHW=3, CHG=4, QUT=9};
int main(void)
{
STU_t *p = NULL;
int n = 0;
int choose;
int num;
int id=123;
char na[10]="klo";
int class=666;
long int tel=134679;
while (1) {
printf("1.增加一个新学生信息 2.删除一个新学生信息 3.查看当前所有学生信息 4.通过学号查找学生,修改其信息 9.退出\n");
printf("学号------姓名-----班级------电话\n");
printf("请选择:");
scanf("%d", &choose);
if (choose == QUT)
break;
switch (choose)
{
case ADD:
printf("请输入要增加的学生信息:");
scanf("%d %s %d %ld", &id, na, &class, &tel);
stu_add(&p, &n, &id, na, &class, &tel );
break;
case DEL:
printf("请输入要删除的学生学号:");
scanf("%d", &id);
stu_del(&p, &n, id);
break;
case CHG:
printf("请输入学生学号和要修改的电话号:");
scanf("%d %ld",&id, &tel);
stu_change(&p, &n, id, &tel);
break;
case SHW :
stu_show(p, n);
break;
default:
break;
}
}
return 0;
}
// 3
static int stu_add(STU_t **p, int *n, int *id, char *name, int *class, long int *tel ) //学号 姓名 班级 电话号
{
char *na; //数组名不能被赋值
if (*p == NULL)
*n = 0;
if (*n == 0)
*p = NULL;
*p = realloc(*p, (*n+1) * sizeof(STU_t));
if (NULL == *p)
return -1;
na=(*p)[*n].name; //指针变量 na指向数
(*p)[*n].id = *id;
// *na=*name; //待处理
memmove(na, name, 32);
(*p)[*n].clas=*class;
(*p)[*n].tel=*tel;
(*n) ++;
return 0;
}
/****** 信息删除******/
static int stu_del(STU_t **p, int *n, int id)
{
// find
int i, j;
for (i = 0; i < (*n); i++) {
if ((*p)[i].id == id)
break;
}
if (i == *n) {
// not found
return -1;
}
memmove((*p)+i, (*p)+i+1, (*n-i-1)*sizeof(STU_t));
(*n) --;
*p = realloc(*p, *n * sizeof(STU_t));
if (NULL == *p)
return -1;
return 0;
}
/***** 信息修改 ***/
static int stu_change(STU_t **p,int *n, int id, long int *tel)
{
int i, j;
for (i = 0; i < (*n); i++)
{
if ((*p)[i].id == id)
break;
}
if (i == *n)
{
printf("not found\n");// not found
return -1;
}
printf("%ld %ld\n", (*p)[i].tel, *tel);
(*p)[i].tel=*tel;
printf("%ld %ld\n", (*p)[i].tel, *tel);
return 0;
}
static void stu_show(STU_t *p, int n)
{
int i;
for (i = 0; i < n; i++) {
printf("%d %s %d %ld\n", p[i].id, p[i].name, p[i].clas, p[i].tel);
}
printf("\n");
}