#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MaxSize 50
#define TRUE 1
#define FALSE 0
typedef int BOOL;
typedef struct student {
char num[9];
char name[9];
char sex[5];
float score;
}student;
typedef student T ;
typedef struct {
int Size;
int MaxList;
T Element[MaxSize];
}List;
List* initial() {
List *lst;
lst=(List *)malloc(sizeof(List));
return lst;
}
void CreateList(List *lst, int maxsize) {
lst->Size = 0;
lst->MaxList = maxsize;
}
BOOL Append(List *lst,T x)
{
if(lst->Size > lst->MaxList) {
printf("Out of Data!");
return FALSE;
}
strcpy(lst->Element[lst->Size].num, x.num);
strcpy(lst->Element[lst->Size].name, x.name);
strcpy(lst->Element[lst->Size].sex, x.sex);
lst->Element[lst->Size].score = x.score;
lst->Size++;
return TRUE;
}
BOOL IsFull(List* lst) {
if(lst->Size==lst->MaxList)
return TRUE;
else
return FALSE;
}
BOOL Insert(List* lst, int pos, T x)
{
int i;
if ( IsFull(lst)){
printf("Overflow"); return FALSE;
}
if ( pos<0 || pos > lst->Size){
printf("Out of Bounds");
return FALSE;
}
for ( i=lst->Size-1; i>=pos; i-- ) {
lst->Element[i+1] = lst->Element[i];
}
strcpy(lst->Element[pos].num, x.num); //字符;
strcpy(lst->Element[pos].name, x.name);
strcpy(lst->Element[pos].sex, x.sex);
lst->Element[pos].score = x.score;
lst->Size++;
return TRUE;
}
BOOL Remove(List* lst, int pos) {
int i;
if(pos>=0 && pos <= lst->Size-1) {
for(i = pos; i < lst->Size-1; i++ ) {
lst->Element[i] = lst->Element[i+1];
}
lst->Size = lst->Size -1;
}
else {
printf("要删除的位置不合法!\n");
}
return 0;
}
BOOL Replace(List* lst, int pos, T x) {
if(pos >= 0 && pos <= lst->Size) {
lst->Element[pos] = x;
printf("替换成功!\n");
}
else {
printf("输入的信息不合法\n");
}
return 0;
}
void Find(List* lst, int pos) {
if(pos>=0 && pos <= lst->Size-1) {
printf("find it!\n");
}
}
void output(List *lst, int j) {
printf("%-10s%-10s%-10s%6f\n",lst->Element[j].num, lst->Element[j].name, lst->Element[j].sex,lst->Element[j].score);
}
void Loc(List* lst, char *a) {
int i;
for(i = 0; i < lst->Size-1; i++) {
if(!strcmp(lst->Element[i].num , a)) {
output(lst, i);break;
}
}
}
void Show(List *lst) {
int i;
printf("数据表中记录条数为:%d\n",lst->Size);
printf("____________________________________________________________________\n");
for(i=0; i < lst->Size; i++) {
printf("%-10s%-10s%-10s%6f\n",lst->Element[i].num, lst->Element[i].name, lst->Element[i].sex,lst->Element[i].score);
printf("____________________________________________________________________\n");
}
}
void input( T* stemp ) {
printf("学号:");
scanf("%s", stemp->num);
printf("姓名:");
scanf("%s", stemp->name);
printf("性别:");
scanf("%s", stemp->sex);
printf("成绩:");
scanf("%f", &stemp->score);
}
int main()
{
List *L;
int i, pos, maxsize;
int loc = 0;
char sf;
char num[10];
T* stemp;
stemp = (T *)malloc(sizeof(T));
L = initial();
maxsize = MaxSize;
CreateList(L, maxsize);
printf("请输入所选择的功能代码:\n");
printf("1-Append 2-Show 3-Insert 4-Remove 5-Replace \n");
printf("6-find 7-Locate 0-Exit\n");
scanf("%d", &i);
do{
switch(i) {
case 1:
printf("请输入学生信息:\n");
input(stemp);
if (Append(L,*stemp)==TRUE) {
printf("添加数据成功!");
}
else {
printf("添加数据失败!");
}
break;
case 2:
Show(L);
break;
case 3:
printf("您要在哪个位置插入记录?");
scanf("%d",&pos);
printf("请输入您要插入的学生记录:\n");
printf("请输入学生信息:\n");
input(stemp);
Insert( L, pos, *stemp );
Show(L);
break;
case 4:
printf("请输入要删除学生的位置:\n");
scanf("%d", &loc);
Remove( L, loc );
Show( L );
break;
case 5:
printf("请输入您要替换的位置:\n");
scanf("%d", &loc);
input(stemp);
Replace( L, loc, *stemp );
Show(L);
break;
case 6:
printf("请输入要查找第几个学生的信息:\n");
scanf("%d", &loc);
Find( L, loc-1 );
output(L, loc-1);
break;
case 7:
printf("请输入要查找学生的学号:\n");
scanf("%s", num);
Loc(L, num);
default:break;
}
if (i!=0){
printf("是否继续?(Y/N)");
getchar();
scanf("%c", &sf);
if (sf=='N'||sf=='n') {
break;
}
printf("请输入所选择的功能代码:\n");
scanf("%d",&i);
}
}while(i);
return 0;
}
学生信息管理
最新推荐文章于 2024-03-24 21:46:29 发布