順序棧實現學生管理系統
阿新 • • 發佈:2019-02-07
#include<stdio.h> #include<stdlib.h> #include<string.h> #define Maxsize 100 struct student { char number[20]; char name[20]; char sex[10]; int age; char examtype[20]; }; typedef struct student ElemType; typedef struct Stack { ElemType data[Maxsize]; int top; } MyStack; void CreateStack(MyStack *&S) { int n; S=(MyStack*)malloc(sizeof(MyStack)); S->top=-1;//初始化棧 printf("請輸入考生人數:\n"); scanf("%d",&n); printf("請輸入考生資訊:\n"); for(int i=0; i<n; i++,S->top++) { scanf("%s%s%s%d%s",S->data[i].number,S->data[i].name,S->data[i].sex,&S->data[i].age,S->data[i].examtype); } printf("建立成功!\n"); } void DisStack(MyStack*S) { int k=S->top+1; int m=S->top; for(int i=0; i<k; i++) { printf("%s %s %s %d %s\n",S->data[m].number,S->data[m].name,S->data[m].sex,S->data[m].age,S->data[m].examtype); m--; } } void AddStack(MyStack *S) { int n; printf("請輸入要增加的人數:\n"); scanf("%d",&n); printf("請輸入要增加的考生資訊:\n"); for(int i=0; i<n; i++) { scanf("%s%s%s%d%s",S->data[S->top+i+1].number,S->data[S->top+i+1].name,S->data[S->top+i+1].sex,&S->data[S->top+i+1].age,S->data[S->top+i+1].examtype); } S->top+=n; printf("增加成功!\n"); } void RiverseStack(MyStack *S)//修改 { char num[20]; printf("請輸入要修改的考生號:\n"); scanf("%s",num); for(int i=0; i<=S->top; i++) { if(strcmp(S->data[i].number,num)==0) { printf("請重新輸入考生資訊(考號,姓名,性別,年齡,報考類別):\n"); scanf("%s%s%s%d%s",S->data[i].number,S->data[i].name,S->data[i].sex,&S->data[i].age,S->data[i].examtype); } } printf("修改成功!\n"); } void DeleteStack(MyStack*S) { ElemType temp; char num[20]; printf("請輸入要刪除的考生號:\n"); scanf("%s",num); for(int i=0; i<=S->top; i++) { if(strcmp(S->data[i].number,num)==0) { temp=S->data[i]; for(int j=i; j<=S->top; j++) { S->data[j]=S->data[j+1]; } S->top--; } } printf("刪除成功!\n"); } void SearchStack(MyStack*S) { char num[20]; printf("請輸入要查詢的考生號:\n"); scanf("%s",num); for(int i=0; i<=S->top; i++) { if(strcmp(S->data[i].number,num)==0) { printf("%s %s %s %d %s\n",S->data[i].number,S->data[i].name,S->data[i].sex,S->data[i].age,S->data[i].examtype); } } } int main() { MyStack *s; CreateStack(s); DisStack(s); AddStack(s); DisStack(s); RiverseStack(s); DisStack(s); DeleteStack(s); DisStack(s); SearchStack(s); DisStack(s); printf("當前棧頂指標是:%d",s->top); return 0; }