C++第一节课,老师给我们留了个作业,用C语言实现学生管系统。
要求实现:增删改查(包含文件操作)
本学渣就腆着脸发出来了。简单小程序。C语言初学的一点小应用
#include<stdio.h>#include<stdlib.h>#include<string.h>#define F_PATH "D://a//info.dat"typedef struct st_info { char number[10]; int sex; char name[20]; char native_place[10]; int birth[3]; struct st_info *next;}info;typedef info *point;void menu0();void menu1();void wr(point head);point create(void);point find(point head, point comp);point del(point head);void addition(point head);void modify(point head);void search(point head);int main(void){ int i; point head; head = NULL; menu0(); head=create(); menu1(); scanf("%d", &i); while (i==1||i==2||i==3||i==4||i==5) { if (i == 1) addition(head); if (i == 2) head = del(head); if (i == 3) modify(head); if (i == 4) search(head); if (i == 5) wr(head); PRintf("如还需完成其他操作,/n请再次输入数字,否则请直接输入数字5退出/n"); scanf("%d", &i); } return 0;}void menu0(void){ printf("********************************************/n"); printf("***********欢迎使用学生管理系统*************/n"); printf("***********以下是系统的使用菜单*************/n"); printf("**********正在载入已储存学生信息************/n");}void menu1(void) { printf("*------------*-*-*-****-*-*-*--------------*/n"); printf("**************1.增加学生信息****************/n"); printf("**************2.删除学生信息****************/n"); printf("**************3.修改学生信息****************/n"); printf("**************4.查找学生信息****************/n"); printf("*************5.储存修改并退出***************/n"); printf("********请按照你的需求输入相应的数字********/n"); printf("*********如果有过信息修改请一定保存*********/n"); printf("********************************************/n");};point create(void)//初始化读取文件信息函数{ FILE *fp; int flag, i; point cr, use,head; head = NULL; use = NULL; flag = 1; fp = fopen(F_PATH, "ab+"); while(1) { cr = (info*)malloc(sizeof(info)); cr->next = NULL; fscanf(fp, "%s", cr->name); fseek(fp, 1L, SEEK_CUR); fscanf(fp, "%d", &cr->sex); fseek(fp, 1L, SEEK_CUR); fscanf(fp, "%s", cr->native_place); fseek(fp, 1L, SEEK_CUR); for (i = 1; i <= 3; i++) fscanf(fp, "%d", &cr->birth[i - 1]); fscanf(fp, "%s", cr->number); if(flag==1) { head = cr; use=cr;} else { use->next=cr; use=use->next; } flag++; if (feof(fp)) break; } fclose(fp); return head;}void wr(point head)//信息再次储存函数 { point c; FILE *fp; int flag = 0; c = head; fp = fopen(F_PATH, "w"); while (head) { fprintf(fp, "%s %d %s %d %d %d", head->name, head->sex, head->native_place, head->birth[0], head->birth[1], head->birth[2]); if(head->next) fputc('/n', fp); head = head->next; free(c); c = head; }}void addition(point head)//增加函数{ point b; b = (info*)malloc(sizeof(info)); b->next = head->next; head->next = b; printf("请输入要插入学生的姓名/n"); { scanf("%s", b->name); } printf("请输入要插入学生的性别(男1女0)/n"); { scanf("%d", &b->sex); } printf("请输入要插入学生的籍贯/n"); { scanf("%s", b->native_place); } printf("请按格式(XXXX-X-X)/n"); { scanf("%d-%d-%d", &b->birth[0], &b->birth[1], &b->birth[2]); } printf("输入要插入的学生学号/n"); { scanf("%s", b->number); } printf("谢谢使用,学生信息已录入/n");}point find(point head,point comp) //查找核心功能{ printf("请输入学生的学号"); char re[10]; int a; point s; s = head; scanf("%s", re); a = 0; while (s) { if (!strcmp(re, s->number)) { comp = s; break; } s = s->next; } return comp;} void search(point head)//查找函数{ point s; int i; s = NULL; s = find(head,s); if (s!=NULL) { printf("查得该学生,是否需要查看该学生信息,需要请输入1,不需要请输入0/n"); scanf("%d", &i); if (i == 0) { printf("该学生的姓名为%s/n", s->name); if (s->sex) printf("该人为男/n"); else printf("性别为女/n"); printf("籍贯为%s/n", s->native_place); printf("生日为%d年%d月%d日/n", s->birth[0], s->birth[1], s->birth[2]); } } else { printf("查无此人,也可能是学号输入错误,如有疑问可以再次查询") ; }}point del(point head)// 删除函数{ printf("请输入要删除的学号"); char re[10]; int a; point s,q; s = q = head; scanf("%s", re); a = 0; if (!strcmp(re, s->number)) { head = head->next; return head; } else { s = s->next; } while (s) { if (!strcmp(re, s->number)) { a = 1; break; } q = s; s = s->next; } if (a) { q->next = s->next; free(s); } if (a==0) { printf("在查找的过程中别没有查找到这个人,请尝试重新操作,也有可能是该学生信息已经被删除/n"); } return head;}void modify(point head)//修改函数{ printf("请输入想要修改的学生现在最后一次储存的学号"); point comp; comp = NULL; comp = find(head,comp); if (comp!=NULL) { printf("请输入你想要修改的学生的信息选项:/n*1.修改学号*/n*2.修改姓名*/n*3.修改籍贯*/n*4.修改生日*/n*(PS:由于法律,性别暂无法修改)*"); int a; scanf("%d", &a); if (a == 1) { char m[10]; printf("请输入学号/n"); scanf("%s", m); memset(comp->number, 0, 10 * sizeof(char)); comp->number[0] = '/0'; strcpy(comp->number, m); } else if (a==2) { char m[20]; printf("请输入姓名/n"); scanf("%s", m); memset(comp->name, 0, 20 * sizeof(char)); comp->name[0] = '/0'; strcpy(comp->name, m); } else if (a==3) { char m[20]; printf("请输入籍贯/n"); scanf("%s", m); memset(comp->native_place, 0, 20 * sizeof(char)); comp->native_place[0] = '/n'; strcpy(comp->native_place, m); } else if (a==4) { int m; printf("请输入性别,男请输入1,女输入2/n"); scanf("%d", &m); comp->sex = m; } else { printf("您输入有误,如有需要,请重试/n"); } } else { printf("对不起,你输入的学号信息有误,请重试/n"); }}
新闻热点
疑难解答