zoukankan      html  css  js  c++  java
  • 学生管理系统(初级)

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 /*
      5 一个小项目,学生管理
      6 核心思想:初始化文件,读文件生成链表,插入节点,退出时将链表data域写入文件保存,用文件当做数据库。
      7 
      8 第一步:实现总目标(菜单):1>.初始化数据 2>.添加学生信息 3>.查找学生信息 4>.删除学生信息 5>.修改学生信息 6>.排序 7>.退出
      9 
     10 第二步:逐一实现单个目标
     11         1>.初始化数据。创建初始的数据,读文件生成链表。
     12         2>.添加学生信息。创建结点插入链表实现添加学生信息
     13         3>.查找学生信息。遍历链表查找学生,并且显示学生所有信息
     14         4>.删除学生信息。遍历链表找到结点,然后找到该结点前区,删除该结点
     15         5>.修改学生信息。遍历链表找到结点,然后修改结点的data域
     16         6>.排序。此处排序依据每门功课的成绩排序
     17         7>.退出程序。退出时将链表的data域写入文件保存。
     18 */
     19 typedef struct student
     20 {
     21     int num;
     22     char name[30];
     23     char sex;
     24     float math;
     25     float chinese;
     26     float english;
     27 //    float phy;
     28 //    float chem;
     29 //    float sport;
     30 }STU;
     31 typedef struct node
     32 {
     33     STU data;
     34     struct node * next;
     35 }NODE;
     36 //初始化
     37 void init()
     38 {
     39     STU stu[] = {
     40         {1001,"张三",'x',100,100,100},
     41         {1002,"李四",'x',100,100,100},
     42         {1003,"王麻子",'x',100,100,100}
     43     };
     44     
     45     FILE * fp = fopen("stu.data","wb+");
     46     //一次将初始化数据全部写入文件
     47     fwrite((void *)stu,sizeof(stu),1,fp);
     48 
     49     //查看初始化数据
     50 /*    rewind(fp);
     51 
     52     STU Stu;
     53     while(fread((void *)&Stu,sizeof(STU),1,fp) >0 )
     54     {
     55         printf("num = %d	name = %s	sex = %c	math = %0.2f	chinese =%0.2f	english =%0.2f",
     56                 Stu.num,Stu.name,Stu.sex,Stu.math,Stu.chinese,Stu.english);
     57         putchar(10);
     58     }
     59 */
     60     fclose(fp);
     61 }
     62 //读文件生成链表
     63 NODE * createList()
     64 {
     65     NODE *head = (NODE *)malloc(sizeof(NODE));
     66     head->next = NULL;
     67     
     68     FILE *fp = fopen("stu.data","rb");
     69     if(NULL == fp)
     70         return NULL;
     71     NODE *sur = (NODE *)malloc(sizeof(NODE));
     72     while(fread((void *)&sur->data,sizeof(STU),1,fp) >0 )
     73     {
     74         sur->next = head->next;
     75         head->next = sur;
     76 
     77         sur = (NODE *)malloc(sizeof(NODE));
     78     }
     79     free(sur);
     80     fclose(fp);
     81     return head;
     82 }
     83 //添加学生(插入节点)
     84 void insertNode(NODE *head)
     85 {
     86     NODE * sur = (NODE *)malloc(sizeof(NODE));
     87     printf("请输入学号:");scanf("%d",&sur->data.num);
     88     printf("请输入姓名:");scanf("%s",sur->data.name);getchar();
     89     printf("请输入性别:");scanf("%c",&sur->data.sex);
     90     printf("请输入数学:");scanf("%f",&sur->data.math);
     91     printf("请输入语文:");scanf("%f",&sur->data.chinese);
     92     printf("请输入英语:");scanf("%f",&sur->data.english);
     93 
     94     sur->next = head->next;
     95     head->next = sur;
     96 
     97 }
     98 //查看学生(遍历链表)
     99 void displaystudent(NODE *head)
    100 {
    101     printf("学号	姓名	性别	数学	语文	英语
    
    ");
    102     head = head->next;
    103     while(head)
    104     {
    105         printf("%d	%s	%c	%0.2f	%0.2f	%0.2f
    ",
    106                 head->data.num,head->data.name,head->data.sex,head->data.math,head->data.chinese,head->data.english);
    107         head = head->next;
    108     }
    109 }
    110 //删除学生(删除结点)
    111 void deleteStudent(NODE *head)
    112 {
    113     char ch[50];
    114     NODE *p = head;
    115     printf("请输出删除学生的姓名
    ");
    116     scanf("%s",ch);
    117     while(p)
    118     {
    119         p = p->next;
    120         if(strcmp(p->data.name,ch) == 0)
    121             break;
    122     }
    123     if(NULL == p)
    124         printf("不存在这个学生
    ");
    125     else
    126     {
    127         while(head->next != p)
    128         {
    129             head = head->next;
    130         }
    131         head->next = p->next;
    132         free(p);
    133     }
    134 }
    135 //修改学生信息(data域重新赋值)
    136 void modScore(NODE *head)
    137 {
    138     
    139     printf("输入要修改成绩学生姓名
    ");
    140     char ch[50];
    141     scanf("%s",ch);
    142     NODE * p = head;
    143     while(p)
    144     {
    145         p = p->next;
    146         if(strcmp(p->data.name,ch) == 0)
    147             break;
    148     }
    149     if(NULL == p)
    150         printf("不存在这个学生
    ");
    151     else
    152     {
    153         printf("选择要修改成绩的学科:1>.数学	2>.语文	3>.英语	4>.全部修改
    ");
    154         int i;
    155         scanf("%d",&i);
    156         switch(i)
    157         {
    158         case 1: 
    159             printf("数学成绩修改为:");scanf("%f",&p->data.math);
    160             break;
    161         case 2:
    162             printf("语文成绩修改为:");scanf("%f",&p->data.chinese);
    163             break;
    164         case 3:
    165             printf("英语成绩修改为:");scanf("%f",&p->data.english);
    166             break;
    167         case 4:
    168             printf("数学成绩修改为:");scanf("%f",&p->data.math);
    169             printf("语文成绩修改为:");scanf("%f",&p->data.chinese);
    170             printf("英语成绩修改为:");scanf("%f",&p->data.english);
    171             break;
    172         }        
    173     }
    174 }
    175 //求链表长度
    176 int lenList(NODE *head)
    177 {
    178     int len = 0;
    179     head = head->next;
    180     while(head)
    181     {
    182         len++;
    183         head = head->next;
    184     }
    185     return len;
    186 }
    187 //排序(只写一种排序把,按照数学成绩排序)
    188 void PopList(NODE *head)
    189 {
    190     int len = lenList(head);
    191     NODE * sur,*p,*q,*temp;
    192     int i,j;
    193     for(i = 0;i<len-1;i++)
    194     {
    195         sur = head;
    196         p = sur->next;
    197         q = p->next;
    198         for(j = 0;j<len-1-i;j++)
    199         {
    200             if(p->data.math > q->data.math)
    201             {
    202                 sur->next = q;
    203                 p->next = q->next;
    204                 q->next = p;
    205                 
    206                 temp = p;
    207                 p = q;
    208                 q = temp;
    209             }
    210             sur = sur->next;
    211             p = p->next;
    212             q = q->next;
    213         }
    214         
    215     }
    216 }
    217 //退出程序(保存链表中的数据,即:将链表中的数据写入文件,文件当做数据库来使用)
    218 void saveStudent2File(NODE *head)
    219 {
    220     head = head->next;
    221     FILE * fp = fopen("stu.data","wb");
    222     while(head)
    223     {
    224         fwrite((void *)&head->data,sizeof(STU),1,fp);
    225         head = head->next;
    226     }
    227     fclose(fp);
    228 }
    229 void menu()
    230 {
    231     //读文件生成链表
    232     NODE *head = createList();
    233     printf("		*****************欢迎使用ZY学生管理系统****************
    
    ");
    234     int choice;
    235     while(1)
    236     {
    237         printf("1>.添加学生信息
    2>.查找学生信息
    3>.删除学生信息
    4>.修改学生信息
    5>.排列学生成绩
    6>.退出
    ");
    238         scanf("%d",&choice);
    239         switch(choice)
    240         {
    241         case 1:
    242             //添加学生信息(插入节点)
    243             insertNode(head);
    244             break;
    245         case 2:
    246             //查看学生信息(遍历链表)
    247             displaystudent(head);
    248             break;
    249         case 3:
    250             //删除学生信息
    251             deleteStudent(head);
    252             break;
    253         case 4:
    254             //修改学生信息
    255             modScore(head);
    256             break;
    257         case 5:
    258             //排列学生成绩
    259             PopList(head);
    260             break;
    261         case 6:
    262             //退出程序(保存链表中的数据,即:将链表中的数据写入文件)
    263             saveStudent2File(head);
    264             return ;    
    265         }
    266     }    
    267 }
    268 int main(void)
    269 {
    270     //初始化数据
    271 //    init();
    272     menu();
    273     
    274     return 0;
    275 }
  • 相关阅读:
    200. Number of Islands(DFS)
    DoubleDQN---tensorflow实现
    133. Clone Graph(图的复制)
    python deque
    136. Single Number(位运算)
    C++中位运算
    anacoda 安装默认源中没有的包
    kali系统安装图文教程
    C#基础|初探反射
    一般处理程序(ashx)和页面处理程序(aspx)的区别
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9787798.html
Copyright © 2011-2022 走看看