学生管理系统

来源:互联网 发布:梵高 星空 知乎 编辑:程序博客网 时间:2024/06/05 11:15
实现添加、删除、查找、排序;并且对用户识别。虽然不完善,但是可以运行。源码如下:#define  _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>#include <assert.h>#define NAME strcmp(p->person.name, q) == 0enum{ SEARCHS = 1, ADDS, UPDATES, DELETES, ADDU, UPDATEU, DELETEU, SEARCHU, EXIT ,SORT};int choose1(){ puts("***********************************************************"); puts("***********Student Information Mangement System************"); puts("***********************************************************"); printf("\n"); puts("             1 search student information"); puts("             2 add student information"); puts("             3 update student information"); puts("             4 delete student information"); puts("             5 add user account"); puts("             6 update user account"); puts("             7 delete user account"); puts("             8 search user account"); puts("             9 exit"); puts("            10 sort by id"); printf("\n"); puts("selete a number:"); int num = 0; scanf("%d",&num); return num;}int choose2(){ puts("***********************************************************"); puts("***********Student Information Mangement System************"); puts("***********************************************************"); printf("\n"); puts("             1 search student information"); puts("             8 search user account"); puts("             9 exit"); printf("\n"); puts("selete a number:"); int num = 0; scanf("%d", &num); return num;}void print(void){ puts("1 update id"); puts("2 update name"); puts("3 update gender"); puts("0 exit");}typedef struct stu{ int id; char name[32]; char gender[5]; char password[8];}stu_t;typedef struct node node_t;struct node{ stu_t person; node_t *next;};void save(node_t **head,int flag){ FILE *fp; if (flag)  fp = fopen("teacher.dat", "ab+");//a+ else  fp = fopen("student.dat", "ab+");//a+ node_t *p = *head; while (p) {  fwrite(&p->person, sizeof(p->person), 1, fp);  p = p->next; } fclose(fp);}void save1(node_t **head, int flag){ FILE *fp; if (flag)  fp = fopen("teacher.dat", "wb");//a+ else  fp = fopen("student.dat", "wb");//a+ node_t *p = *head; while (p) {  fwrite(&p->person, sizeof(p->person), 1, fp);  p = p->next; } fclose(fp);}void addS(node_t **head){ if (head != 0) {  int flag = 1;  while (flag)  {   node_t *p = (node_t *)malloc(sizeof(node_t));   puts("id:");   scanf("%d", &p->person.id);   puts("name:");   scanf("%s", p->person.name);   puts("gender:");   scanf("%s", p->person.gender);   puts("password:");   scanf("%s", p->person.password);   p->next = NULL;   if (*head == NULL)   {    *head = p;   }   else   {    node_t *temp = *head;    printf("%d\n", temp->person.id);    while (temp->next != NULL)     temp = temp->next;    temp->next = p;   }   puts("按1继续,按0停止");   int c;   scanf("%d",&c);   if ( c == 0)    flag = 0;  } }}void show(node_t *p){ printf("姓名\t学号\t性别\n"); printf("----------------------------------\n"); printf("%s\t%d\t%s\n", p->person.name, p->person.id, p->person.gender); printf("----------------------------------\n\n\n");}void load(node_t **head,char *q,int flag)//NUM  为0是查找;为1是修改{ FILE *fp; if (flag)  fp = fopen("teacher.dat", "r");//a+ else  fp = fopen("student.dat", "r");//a+ if (fp == NULL) { return; } stu_t s; while (fread(&s, sizeof(stu_t), 1, fp) == 1) {  node_t *p = (node_t *)malloc(sizeof(node_t));  memset(p, 0x00, sizeof(node_t));  memcpy(&p->person, &s, sizeof(stu_t));  p->next = NULL;  if (NAME)// (strcmp(p->person.name, q) == 0)  {   show(p);  }  if (*head == NULL)  {   *head = p;  }  else  {   node_t *t = *head;   while (t->next != NULL)   {    t = t->next;   }   t->next = p;  } } fclose(fp);}void load1(node_t **head, int *q,int flag){ FILE *fp; if (flag)  fp = fopen("teacher.dat", "r");//a+ else  fp = fopen("student.dat", "r");//a+ if (fp == NULL) { return; } stu_t s; while (fread(&s, sizeof(stu_t), 1, fp) == 1) {  node_t *p = (node_t *)malloc(sizeof(node_t));  memset(p, 0x00, sizeof(node_t));  memcpy(&p->person, &s, sizeof(stu_t));  p->next = NULL;  if (p->person.id == *q)  {   show(p);  }  if (*head == NULL)  {   *head = p;  }  else  {   node_t *t = *head;   while (t->next != NULL)   {    t = t->next;   }   t->next = p;  } } fclose(fp);}void search(node_t **head, int flag){ puts("1 search by name"); puts("2 search by id"); puts("0 exit"); int choose = 1; while (choose) {  scanf("%d", &choose);  switch (choose)  {  case 1:  {      puts("name:");      char temp[32];      scanf("%s", temp);      load(head, temp,flag);  }   break;  case 2:  {      puts("id:");      int temp = 0;      scanf("%d", &temp);      load1(head, &temp,flag);  }   break;  case 0:   puts("返回上一层。");   break;  default:   puts("输入不合法,请重新输入。");   break;  }   }}node_t *ReadData(int num){ FILE *fp; switch (num) { case 0:  fp = fopen("student.dat", "r");  if (fp == NULL)  {   puts("文件student.dat打开出错!!系统即将关闭!!!\n");   Sleep(1000);   exit(1);  }  break; case 1:  fp = fopen("teacher.dat", "r");  if (fp == NULL)  {   puts("文件teacher.dat打开出错!!系统即将关闭!!!\n");   Sleep(1000);   exit(1);  }  break; } node_t *head = NULL; node_t *p2 = NULL; stu_t s; while (fread(&s, sizeof(stu_t), 1, fp) == 1) {  node_t *p = (node_t *)malloc(sizeof(node_t));  memset(p, 0x00, sizeof(node_t));  memcpy(&p->person, &s, sizeof(stu_t));  p->next = NULL;  if (p == NULL)  {   printf("内存读取出错\n");   fclose(fp);  }  if (NULL == head)  {   head = p;   p2 = p;  }  else  {   while (p2->next != NULL)   {    p2 = p2->next;   }   p2->next = p;  } } fclose(fp); return (head);}void updateS(node_t **head,int flag){ puts("1 update by name"); puts("2 update by id"); puts("0 exit"); int choose = 1; while (choose) {  scanf("%d", &choose);  switch (choose)  {  case 1:   /***************************获得输入的姓名************************/  {   puts("name:");   char temp[32];   scanf("%s", temp);   node_t *p1 = NULL;   p1 = *head;   node_t *p2 = NULL;   p2 = p1->next;   while (p2 != NULL)   {    if (strcmp(p1->person.name, temp) == 0)//(NAME)    {     show(p1);     print();     int choose1;     scanf("%d", &choose1);     switch (choose1)     {     case 1:     {         int temp1;         puts("id:");         scanf("%d", &temp1);         p1->person.id = temp1;     }      break;     case 2:     {         char temp1[32];         puts("name:");         scanf("%s", temp1);         strcpy(p1->person.name, temp1);     }      break;     case 3:     {         char temp1[5];         puts("gender:");         scanf("%s", temp1);         strcpy(p1->person.gender, temp1);     }      break;     case 0:      puts("返回上一层。");      break;     default:      puts("输入不合法,请重新输入。");      break;     }     show(p1);    }    p2 = p2->next;    p1 = p1->next;   }  }   break;  case 2:  {     puts("id:");     int temp = 0;     scanf("%d", &temp);     node_t *p1 = NULL;     p1 = *head;     node_t *p2 = NULL;     p2 = p1->next;     while (p2 != NULL)     {      if (p1->person.id==temp)      {       show(p1);       print();       int choose1;       scanf("%d", &choose1);       switch (choose1)       {       case 1:       {        int temp1;        puts("id:");        scanf("%d", &temp1);        p1->person.id = temp1;       }        break;       case 2:       {        char temp1[32];        puts("name:");        scanf("%s", temp1);        strcpy(p1->person.name, temp1);       }        break;       case 3:       {        char temp1[5];        puts("gender:");        scanf("%s", temp1);        strcpy(p1->person.gender, temp1);       }        break;       case 0:        puts("返回上一层。");        break;       default:        puts("输入不合法,请重新输入。");        break;       }       show(p1);      }      p1 = p1->next;      p2 = p2->next;     }  }   break;  case 0:   puts("返回上一层。");    break;  default:   puts("输入不合法,请重新输入。");   break;  } }}void deleteS(node_t **head, int flag){ FILE *fp; FILE *fp1; if (flag) {  fp = fopen("teacher.dat", "r");  fp1 = fopen("tea.dat", "w"); } else {  fp = fopen("student.dat", "r");  fp1 = fopen("stu.dat", "w"); } if (fp == NULL) { return; } if (fp1 == NULL) { return; } stu_t s; puts("delete by id:"); puts("id:"); int n; scanf("%d", &n); while (fread(&s, sizeof(stu_t), 1, fp) == 1) {  node_t *p = (node_t *)malloc(sizeof(node_t));  memset(p, 0x00, sizeof(node_t));  memcpy(&p->person, &s, sizeof(stu_t));  p->next = NULL;  if (p->person.id!=n)  {   fwrite(&p->person, sizeof(p->person), 1, fp1);  }  else  {   puts("delete");  } } fclose(fp); fclose(fp1); if (flag) {  remove("teacher.dat");  rename("tea.dat", "teacher.dat"); } else {  remove("student.dat");  rename("stu.dat", "student.dat"); }}int chakan(node_t **head,char *buf, int flag,int num){ FILE *fp; FILE *fp1; if (flag)  fp = fopen("teacher.dat", "r"); else  fp = fopen("student.dat", "r"); if (fp == NULL) { return; } stu_t s; while (fread(&s, sizeof(stu_t), 1, fp) == 1) {  node_t *p = (node_t *)malloc(sizeof(node_t));  memset(p, 0x00, sizeof(node_t));  memcpy(&p->person, &s, sizeof(stu_t));  p->next = NULL;  if ((strcmp(p->person.name, buf) == 0) && (num==0))  {   return 1;  }   if ((strcmp(p->person.password, buf) == 0) && (num == 1))  {   return 1;  } } fclose(fp);  return 0;}void password(char *ch1){ int i = 0; puts("password:"); char ch; while ((ch = getch()) != '\r') {  if (ch == 8)  {   putchar('\b');   putchar(' ');   putchar('\b');   if (i> 0)    i--;  }  if (!isdigit(ch) && !isalpha(ch))   continue;  putchar('*');  ch1[i++] = ch; } ch1[i] = 0; printf("\n");}int denglu(node_t **head){ puts("account numbers:"); char buf1[32]; scanf("%s", buf1); int p1=chakan(head, buf1, 0,0);//第4个0为查找用户名 if (p1 == 1) {  char ch1[8];  password(ch1);  if (chakan(head, ch1, 0, 1))  {   printf("欢迎!!!\n");   Sleep(1000);   system("CLS");   return 0;//学生  }  else  {   printf("密码错误!!!\n");   Sleep(500);   exit(1);  } } int p2=chakan(head, buf1, 1,0); if (p2 == 1) {  char ch1[8];  password(ch1);  if (chakan(head, password, 1, 1))  {   printf("欢迎!!!\n");   Sleep(1000);   system("CLS");   return 1;//老师  }  else  {   printf("密码错误!!!\n");   Sleep(1000);   exit(1);  } } if (p1==0&&p2==0) {  printf("账号错误!!!\n");  Sleep(500);  exit(1); }}void sort1(node_t *head){ node_t * newhead, *s, *pre , *p; p = head->next; newhead = p->next; p->next = NULL;  while (newhead) {  s = newhead;  newhead = newhead->next;  pre = head;  p = head->next;  while (p != NULL && p->person.id< s->person.id)   {   pre = p;   p = p->next;  }  s->next = p;  pre->next = s; }}int main(void){ node_t *head = NULL; node_t *head1 = NULL; //int denglu1=denglu(&head);/使用此行实现账号输入 int denglu1; denglu1 = 1;  if (denglu1)  {   int choose = 0;   do   {    choose = choose1();    switch (choose)    {    case SEARCHS:     search(&head, 0);     system("CLS");     break;    case ADDS:     addS(&head);     save(&head, 0);     system("CLS");     break;    case UPDATES:    {     node_t *head2 = NULL;     head2 = ReadData(0);     updateS(&head2, 0);     save1(&head2, 0);     system("CLS");    }     break;    case DELETES:     deleteS(&head, 0);     system("CLS");     break;    case ADDU:     addS(&head1);     save(&head1, 1);     system("CLS");     break;    case UPDATEU:    {     node_t *head2 = NULL;     head2 = ReadData(1);     updateS(&head2, 1);     save1(&head2, 1);     system("CLS");    }     break;    case DELETEU:     deleteS(&head1, 1);     system("CLS");    case SEARCHU:     search(&head1, 1);     system("CLS");     break;    case EXIT:     printf("欢迎下次使用\n");     exit(1);     break;    case SORT:    {     node_t *head2 = NULL;     head2 = ReadData(0);      sort1(head2);     save1(&head2, 0);     system("CLS");    }     break;    default:     printf("请重新输入。\n");     break;    }   } while (choose != 9);  }  else  {   int choose = 0;   do   {    choose = choose2();    switch (choose)    {    case SEARCHS:     search(&head, 0);     system("CLS");     break;    case SEARCHU:     search(&head1, 1);     system("CLS");     break;    case EXIT:     printf("欢迎下次使用\n");     exit(1);     break;    default:     printf("请重新输入。\n");     break;    }   } while (choose != 9);  } return 0;}
0 0
原创粉丝点击