当时只道是寻常 my first 仅以此篇作为一个开始

使用结构体实现对学生信息的存储、用顺序表实现了对于一个个结构体的存储整体
5月10日 还有待完善 没有循环插入 还没有做删除的函数

/**********************************************************
*   file name:Struct
*   function: 实现结构体的顺序表
*   date: 2025.5.8
*   note:none
*   Copyright (c) 2025 l550036303@163.com Allright reserved
************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max 20
typedef struct StudentInformation {
    char *name;
    int ID;
    char sex[10];
    int age;
}stu;

typedef struct sequetable {
    stu *student;
    int len;
    int maxlen;
}seqtab;

/******************************
*   name:myaddone
*   function: 实现增加一个学生的信息
*   argument:
*               @sq 指向seqtab顺序表的指针
*   retval:none
*   date: 2025.5.8
*   note:none
*
********************************/
void myaddone(seqtab *sq){
    if(sq->len >= sq->maxlen){
        printf("size of sq is full");
        return;
    }

  
    int n =sq->len;

    sq->student[n].name =(char *) malloc(20 * sizeof(char));
    if (sq->student[n].name == NULL) {
        perror("内存分配失败");
        return;
    }
    printf("plase input student infor\n");
    printf("InforList:\tname\tID\tsex\tage\n");

  //  scanf("%s",sq->student[n].name);
    scanf("%s %d %s %d",sq->student[n].name,&sq->student[n].ID,sq->student[n].sex,&sq->student[n].age);
    (sq->len)++;
    printf("!!!!!!!!!!!!!addsuccess!!!!!!!!!!!!!\n");
}



/******************************
*   name:myprintf
*   function:打印顺序表内所有学生的信息
*   argument: 
*             @sq   指向seqtab顺序表的指针
*   date:2025.5.8
*   note:none
*   
********************************/
void myprintf(seqtab *sq){

    if(sq->len <= 0){
        
        printf("no student information");

        return;
    }
    for(int i=0 ; i < sq->len ;i++){
        printf("****************************************\n");
        printf("name:\t%s\n",((sq-> student)+i) -> name);
        printf("ID:\t%010d\n",((sq-> student)+i) -> ID);
        printf("sex:\t%s\n",((sq-> student)+i) -> sex);
        printf("age:\t%d\n",((sq-> student)+i) ->age);
        }
        printf("****************************************\n");
    return;
}
int main(void){
    // stu stu1;
    // stu1.name="abcd";

    // printf("%s\n",stu1.name);

    // printf("********************************************\n");
    seqtab *sq1 = (seqtab *)malloc(sizeof(seqtab));

    if (sq1 == NULL) {
        fprintf(stderr, "Memory allocation failed!\n");  // 添加内存分配检查
        exit(EXIT_FAILURE);
    }


    sq1->len=0;
    sq1->maxlen=Max;
    sq1->student =(stu *)malloc(sizeof(stu)*(sq1->maxlen));

    if (sq1->student == NULL) {
        fprintf(stderr, "Memory allocation failed!\n");  // 添加内存分配检查
        exit(EXIT_FAILURE);
    }
    

    /*******************
    *
    *注入基本数据
    *
    ********************/
    sq1-> student->name=(char *)malloc( sizeof(char) * 20 );
    sq1-> student->name= "xiaoming";
    sq1-> student->ID= 20250106;
    //sq1-> student->sex= "man";
    strcpy(sq1->student->sex,"woman");
    sq1-> student->age= 18;
    (sq1->len)++;




//     int choose;
// printf("请输入数字: ");
// if (scanf("%d", &choose) == 1) {
//     printf("输入值: %d\n", choose);
// } else {
//     printf("输入错误!\n");
//     // 清空缓冲区
//     while (getchar() != '\n');
// }




    int choose;
  
while(1){

    printf("input( number 1 or 2)\n(other number is quit):\n\t1:addinformantion\n\t2:printfinformation\n");
    scanf("%d",&choose);
    switch(choose){
        case 1:myaddone(sq1); break;
        case 2:myprintf(sq1);break;
        default:

        for(int j=1;j< sq1->len;j++){
            free(sq1->student[j].name);
        }
        free(sq1->student);
        free(sq1);  return 0;
    }

}
  
    // myaddone(sq1);

     myprintf(sq1);

 
 
    // printf("%s\n",sq1->student->name);
    // printf("%d\n",sq1->student->ID);
    // printf("%s\n",sq1->student->sex);
    // printf("%d\n",sq1->student->age);

    
//    seqtab stab = malloc();
//    int a=Max;
//    printf("%d",a);

    return 0;
}

posted @ 2025-05-10 15:33  记得要好好吃饭  阅读(10)  评论(0)    收藏  举报