学生管理系统
来源:互联网 发布:梵高 星空 知乎 编辑:程序博客网 时间: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
- 一个学生管理系统
- 学生同学录管理系统
- 学生管理系统
- 销售学生管理系统
- 学生通讯管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生学籍管理系统
- 学生管理系统
- 学生通讯录管理系统
- 学生管理系统
- 学生管理系统源程序
- 学生管理系统源程序
- 学生管理系统实现
- 学生管理系统
- 学生管理系统
- Socket Tcp C#
- FIR滤波器的Matlab实现
- Linux下安装PHP7(配合Apache使用)
- Node.js快速入门
- nginx linux 安装、启动、升级
- 学生管理系统
- Scala 介绍之 HelloWorld
- 用java控制html
- openfst 1.6.1编译过程中失败的修改(short-path.h)
- P1035
- 商业需求分析(BRD)模板
- 17-02-11
- MFC里_T("")的意思
- 357. Count Numbers with Unique Digits(unsolved)