数据结构课设之学生管理系统(C语言)

直接看代码吧,我只实现了几个很简单的增删改操作,利用文件进行存储,为了便于再不同的地方进行操作我便写了一个bat批处理,直接在D盘创建一个t.txt,应为程序中的文件都是从D:\t.txt中读取的。具体代码如下。

#include
#include
#define LL sizeof(stu)
#define N  3
int  COUNT = 10;
int num;
typedef struct student
{
    int no;         //学号
    char name[20];  //姓名
    char sex[10];   //性别
    int score[N]; //成绩
    struct student *next;
}stu;

stu *creatlist(void)
{
    stu *p1,*p2,*head=NULL;
    num=0;
    p1=p2=(stu *)malloc(LL);
    printf("请输入学生信息:学号,姓名,性别,语文成绩,数学成绩,英语成绩\n");
    scanf("%d%s%s",&p1->no,p1->name,p1->sex);

    for(int i=0;i<N;i++)
        scanf("%d",&p1->score[i]);

    while(p1->no!=0)
    {
        num++;
        if(num==1)
           head=p1;
           else
           p2->next=p1;
           p2=p1;
           p1=(stu*)malloc(LL);
           scanf("%d%s%s",&p1->no,p1->name,p1->sex);
    for(int i=0;i<N;i++)
        scanf("%d",&p1->score[i]);

    }
    p2->next=NULL;
    return head;
}

//从本地文件导入数据

stu * import(){
    stu * p ,*head,*q;
    FILE * fp;
    head = p = q = (stu*)malloc(LL);
    if((fp = fopen("D://t.txt","r"))==NULL){
        printf("file not open\n");
        exit(1);
    }
    for(int i =1 ;i<=COUNT;i++){

        fscanf(fp,"%d %s %s %d %d %d\n",&p->no,p->name,p->sex,&p->score[0],&p->score[1],&p->score[2]);

        if(i==COUNT){
            p->next = NULL;
            break;
        }
        q = (stu*)malloc(LL);
        p->next = q;
        p = q;
    }

    fclose(fp);

    return head;
}



//查询学生信息
void lookup( stu *head ,int no)
{
    stu *p1=head;
    if(head==NULL)
        printf("该链表为空链表\n");
    while(p1->no!=no&&p1->next!=NULL)
          p1=p1->next;
          if(p1->no==no)
          {
              printf("学号\t\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\n");
              printf("%d\t\t%s\t%s\t%d\t\t%d\t\t%d\n",p1->no,p1->name,p1->sex,p1->score[0],p1->score[1],p1->score[2]);
          }
          else
            printf("没有该同学的信息\n");

}




//修改学生信息

stu* alter( stu *head ,int no)
{
    stu *p1=head;
    if(head==NULL)
        printf("该链表为空链表\n");
    while(p1->no!=no&&p1->next!=NULL)
          p1=p1->next;
          if(p1->no==no)
          {
              printf("学号\t\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\n");
              printf("%d\t\t%s\t%s\t%d\t\t%d\t\t%d\n",p1->no,p1->name,p1->sex,p1->score[0],p1->score[1],p1->score[2]);
              printf("请输入要修改的信息\n");
              scanf("%d%s%s%d%d%d",&p1->no,p1->name,p1->sex,&p1->score[0],&p1->score[1],&p1->score[2]);
          }
          else
            printf("没有该同学的信息\n");
    return head;

}

//输出学生信息
void showlist(stu *p1)
{
    printf("学号\t\t姓名\t\t性别\t语文成绩\t数学成绩\t英语成绩\n");

    if(p1==NULL)
     printf("该链表为空链表!\n");
     else
     while(p1!=NULL)
     {
         printf("%d\t\t%s\t\t%s\t%d\t\t%d\t\t%d\n",p1->no,p1->name,p1->sex,p1->score[0],p1->score[1],p1->score[2]);
         p1=p1->next;
     }

}

//保存到文件
void datalist(stu * head){
    printf("如存入数据与原数据相同请删除\n");
    printf("删除请输入1,否则输入0\n");
    int n ;
    scanf("%d",&n);
    if(n==1){
        clearlist();
        COUNT = 0;
    }
    FILE * fp ;
    if((fp = fopen("D://t.txt","a+"))==NULL){
        printf("file not open\n");
        exit(1);
    }
    while(head!=NULL){
        COUNT++;
        fprintf(fp,"%d %s %s %d %d %d\n",head->no,head->name,head->sex,head->score[0],head->score[1],head->score[2]);
        head = head -> next;
    }
       fclose(fp);

}

//清空文件中的数据
void clearlist(){
    remove("D://t.txt");
    return ;
}



//删除学生信息
stu *del(stu* head,int no)
{
    stu *p1,*p2=NULL;
    if(head==NULL)
    {
        printf("此链表为空链表!\n");
        goto end;
    }
    p1=head;
    while(p1->no!=no&&p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(p1->no==no)
      {
          num--;
          if(p1==head)
          head=p1->next;
          else
          p2->next=p1->next;
      }


      end:
         return (head);
}
//删除最后的零节点
stu *clear(stu* head)
{
    stu *p1,*p2=NULL;
    if(head==NULL)
    {
        printf("此链表为空链表!\n");
        goto end;
    }
    p1=head;
    while(p1->no!=0&&p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(p1->no==0)
      {
          num--;

          p2->next=NULL;
      }
      else
      printf("未找到该结点!\n");

      end:
         return (head);
}




//插入学生信息
stu *insert( stu *head,stu *worker )
{
    stu *p1,*p2=NULL,*p0=worker;
    p1=head;
    if(head==NULL)
    {
        head=p0;
        p0->next=NULL;
    }
    else
    {
        while(p1->no<p0->no&&p1->next!=NULL)
        {
            p2=p1;
            p1=p1->next;
        }
        if(p1->no==p0->no){
            printf("学号冲突,请重新输入\n");
            return head;
        }

        if(p1->no>p0->no)
        {
            if(p1==head)
            head=p0;
            else
             p2->next=p0;
             p0->next=p1;
        }
        else
        {
            p1->next=p0;
            p0->next=NULL;
        }
    }
    num++;
    return head;
}

//欢迎
void print(void){

    printf("*********************************************************\n");
    printf("*                    欢迎来到易学生系统                   *\n");
    printf("*********************************************************\n");
    printf("1 手动录入学生信息\t\t2 自动从文件导入数据(推荐)\n\n"
           "3 删除学生信息\t\t\t4 添加学生\n\n"
           "5 查找学生\t\t\t6 输出学生信息\n\n"
           "7 修改学生信息\t\t\t8 保存数据到数据库\n\n"
           "9 查看菜单\t\t\t10 退出学生管理系统!\n\n");
    printf("********************************************************\n");

    printf("请输入指令\n");

}

void Seemnue(void){
    printf("*********************************************************\n");
    printf("1 手动录入学生信息\t\t2 自动从文件导入数据(推荐)\n\n"
           "3 删除学生信息\t\t\t4 添加学生\n\n"
           "5 查找学生\t\t\t6 输出学生信息\n\n"
           "7 修改学生信息\t\t\t8 保存数据到数据库\n\n"
           "9 查看菜单\t\t\t10 退出学生管理系统!\n\n");
    printf("********************************************************\n");

}

int main()
{
    print();

    int h,t,n;
    stu *k;
    stu *hh;

     while(scanf("%d",&h)!=EOF)
     switch(h)
     {

         case 1:
             printf("结束 请输入0 0 0 0 0 0 \n\n");
            k=creatlist();
            printf("请输入指令\n");
                break;


         case 2:k = import();
                k = clear(k);
         printf("请输入指令\n");
                break;


         case 3:
                  printf("请输入要删除学生的编号\n");
                  scanf("%d",&t);
                  k=del(k,t);
                  printf("请输入指令\n");
                   break;

         case 4:
                printf("请输入要添加学生的信息\n");
                printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\n");
                hh=(stu*)malloc(LL);
                scanf("%d%s%s",&hh->no,hh->name,hh->sex);
                    for(int i=0;i<N;i++)
                        scanf("%d",&hh->score[i]);
                            k=insert(k,hh);
                            printf("请输入指令\n");
                        break;
        case 5: printf("请输入要查学生的编号\n");
                    scanf("%d",&n);
                        lookup(k,n);
                        printf("请输入指令\n");
                        break;

        case 6: showlist(k);  printf("请输入指令\n"); break;

        case 7: printf("请输入要修改学生的编号\n");
                    scanf("%d",&n);
                    k = alter(k,n);
                    printf("请输入指令\n"); break;

        case 8: datalist(k);  printf("请输入指令\n"); break;

        case 9: Seemnue(); printf("请输入指令\n"); break;

        case 10:  printf("拜拜,结束!\n");break;
     }
    return 0;

}


你可能感兴趣的:(C语言)