c语言vim编写的学生管理系统

  • V1_145974
    了解作者
  • 49.5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-14 23:28
    上传日期
c语言vim编写的学生管理系统,简单实现管理员、学生、老师登陆,使用链表进行增删查改
bestCode.zip
  • bestCode
  • sms.c
    1.4KB
  • common.c
    3.1KB
  • manager.h
    162B
  • sms.o
    2KB
  • common.o
    2.1KB
  • common.h
    859B
  • manager.o
    2.5KB
  • list
  • list.h
    1.3KB
  • list.c
    7.6KB
  • list.o
    3.3KB
  • manager.c
    1.8KB
  • stu.o
    16.3KB
  • tea.h
    1.3KB
  • tea.dat
    336B
  • stu.c
    20.8KB
  • tea.o
    14.4KB
  • stu.dat
    1.1KB
  • tea.c
    17.4KB
  • menu.h
    553B
  • menu.c
    5.5KB
  • sms
    35.8KB
  • makefile
    203B
  • stu.h
    2.3KB
  • .Makefile.swp
    12KB
  • menu.o
    5.7KB
内容介绍
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "list.h" #include "stu.h" #include "common.h" #include "menu.h" /* 注: 一个链表结点中的dat,存放一个学生结构体中的所有信息,size相等 dat类型为void *, dat 指向 struct * stu; */ static int compare_id(void *,void *); static int compare_pass(void *,void *); struct student *sptr=NULL; LIST *list_stu=NULL; //比较学生学号和密码 static NODE *stu_compare(struct student *ptr,struct student *ptr1,struct student *ptr2,NODE *cur1,NODE *cur2) { int flag=0; cur1=cur2=list_stu; while(1) { cur1=list_find(cur1,ptr,compare_id); //找到学号对应的学生 if (cur1!=NULL) { ptr1=cur1->dat; cur2=cur1; ptr2=cur2->dat; if ( compare_id(ptr1,ptr)==0 && strcmp(ptr2->pass,ptr->pass)==0 ) { //核对成功使标志位置1 flag=1; break; } } else { //print_err("核对失败!stu.dat文件没有学生数据!",3,10,31); return NULL; } } if (flag==1) { //核对成功返回学生学号对应结点 flag=0; return cur1; } else { //核对失败返回NULL return NULL; } } //学生登录 int student_login() { struct student *ptr1,*ptr2=NULL; NODE *cur1=NULL; NODE *cur2=NULL; sptr=malloc(sizeof(struct student)); ptr1=malloc(sizeof(struct student)); ptr2=malloc(sizeof(struct student)); print_err("欢迎学生登录!",3,10,31); //清屏 printf("\033[2J"); //提示输入学生学号 printf("\033[5;10H\033[31m%s:\033[0m","ID"); scanf("%d",&(sptr->id)); getchar(); //提示输入密码 printf("\033[6;10H\033[31m%s:\033[0m","PASS"); scanf("%s",sptr->pass); getchar(); if(stu_compare(sptr,ptr1,ptr2,cur1,cur2)) { //学号和密码核对成功 return 0; } else { //学号和密码核对失败 return -1; } } //学生登录后的处理 void student_proc() { int ret; while(1) { ret=show_stumenu(); switch(ret) { case 1://显示学生自己信息 stu_lookinfo(); break; case 2://修改学生自己信息 stu_modiinfo(); break; case 3://退出 free(sptr); return; default://打印出错信息 print_err("请输入1-3之间的数字!",3,10,31); break; } } } //显示学生自己的信息 void stu_lookinfo() { struct student *pptr,*ptr1,*ptr2=NULL; NODE *cur,*cur1,*cur2=NULL; int i=0; ptr1=malloc(sizeof(struct student)); ptr2=malloc(sizeof(struct student)); cur=stu_compare(sptr,ptr1,ptr2,cur1,cur2); if(cur!=NULL) { pptr=cur->dat; //清屏 printf("\033[2J\033[3;10H学号\t姓名\t密码\t年龄\t性别\t班级\tC语言\t语文\t数学"); getchar(); printf("\033[%d;10H%d\t%s\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",i+4, pptr->id, pptr->name, pptr->pass, pptr->age, (pptr->sex)==0?"男":"女", pptr->grade, pptr->cscore, pptr->chinese, pptr->mscore); i++; printf("\033[%d;10H-------------------------------------------------------------------------",i+4); getchar(); } return; } //修改学生自己的信息 void stu_modiinfo() { struct student *pptr,*ptr1,*ptr2=NULL; NODE *cur,*cur1,*cur2=NULL; char tp[20]={0}; ptr1=malloc(sizeof(struct student)); ptr2=malloc(sizeof(struct student)); cur=stu_compare(sptr,ptr1,ptr2,cur1,cur2); if(cur!=NULL) { //修改老师的各种信息,如果输入的是ENTER,则为不修改 printf("\033[2J"); //清屏 pptr=cur->dat; getstring("请输入新的名字:", pptr->name, sizeof(pptr->name), 3,10,0); getstring("请输入新的密码:", pptr->pass, sizeof(pptr->pass), 4,10,0); if(getstring("请输入新的年龄:", tp, sizeof(tp), 5,10,0)>0) { pptr->age=atoi(tp); } if(getstring("请输入新的班级:", tp, sizeof(tp), 6,10,0)>0) { pptr->grade=atoi(tp); } } return ; } //学生初始化 int stu_init() { FILE *fp=NULL; struct student stu={0}; //创建链表 list_stu=list_create(sizeof(struct student)); fp=fopen("stu.dat","r"); if (fp==NULL) { print_err("读取stu.dat文件失败",3,10,31); return -1; //失败返回-1 } while(1) { //从文件中读取内容到结构体中 fread(&stu,sizeof(stu),1,fp); //文件读取结束或者文件读取失败 if ( feof(fp) || ferror(fp) ) { fclose(fp); break; } //从结构体读取内容到链表中 list_addtail(list_stu,&stu); } return 0; //成功返回0 } //生成一个新学生 static int stu_new(struct student *ptr) { NODE *cur=NULL; struct student *stu=NULL; stu=malloc(sizeof(struct student)); int max_id=0; //请屏 printf("\033[2J"); printf("\033[3;10H姓名:"); scanf("%s",ptr->name); getchar(); printf("\033[4;10H密码:"); scanf("%s",ptr->pass); getchar(); printf("\033[5;10H年龄:"); scanf("%d",&(ptr->age)); getchar(); printf("\033[6;10H性别:"); scanf("%d",&(ptr->sex)); getchar(); printf("\033[7;10H班级:"); scanf("%d",&(ptr->grade)); getchar(); printf("\033[8;10HC语言:"); scanf("%d",&(ptr->cscore)); getchar(); printf("\033[9;10H语文:"); scanf("%d",&(ptr->chinese)); getchar(); printf("\033[10;10H数学:"); scanf("%d",&(ptr->mscore)); getchar(); //生成一个学生的学号,最大的那个加1 for (cur=list_stu->next;cur!=list_stu;cur=cur->next) { stu=cur->dat; if (stu->id > max_id) { max_id=stu->id; } } ptr->id=max_id+1; return 0; } //添加一个学生 int stu_add() { struct student stu; stu_new(&stu);//生成一个学生 list_addtail(list_stu,&stu);//将学生添加到链表中 return 0; } //打印所有学生的信息 int stu_printall() { NODE *cur=NULL; struct student *stu=NULL; stu=malloc(sizeof(struct student)); int i=0; //清屏 printf("\033[2J\033[3;10H学号\t姓名\t密码\t年龄\t性别\t班级\tC语言\t语文\t数学"); getchar(); for (cur=list_stu->next;cur!=list_stu;cur=cur->next) { stu=cur->dat; printf("\033[%d;10H%d\t%s\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",i+4, stu->id, stu->name, stu->pass, stu->age, (stu->sex)==0?"男":"女", stu->grade, stu->cscore, stu->chinese, stu->mscore); i++; } printf("\033[%d;10H-------------------------------------------------------------------------",i+4); getchar(); return 0; } //保存所有学生 void stu_save() { NODE *cur=NULL; struct student *stu=NULL; stu=malloc(sizeof(struct student)); FILE *fp=NULL; fp=fopen("stu.dat","w"); if (fp==NULL) { print_err("文件stu.dat保存失败!",3,10,31); getchar(); return; } for (cur=list_stu->next;cur!=list_stu;cur=cur->next) { //将链表中的学生写到学生的结构体中 stu=cur->dat; //将学生结构体中的信息写入到文件中 fwrite(stu,sizeof(struct student),1,fp); } fclose(fp); } /////////////////////////////////////////////// //比较学生姓名 static int compare_name(void *dat1,void *dat2) { struct student *stu1=dat1; struct student *stu2=dat2; return strcmp(stu1->name,stu2->name); } //查找学生名字 int stu_findname(struct student *ptr) { NODE *cur=NULL; cur=list_find(list_stu,ptr,compare_name); if (cur=NULL) { print_err("没有这个学生!",3,10,31); getchar(); return -1; } return 0; } //删除学生名字对应学生 int stu_delname() { struct student *stu=NULL; stu=malloc(sizeof(struct student)); int ret=0; //清屏 printf("\033[2J"); printf("\033[3;10H请输入要删除的学生姓名:"); scanf("%s",stu->name); getchar(); ret=stu_findname(stu); if (ret==0) { list_del(list_stu,stu,compare_name); return 0; } else {
评论
    相关推荐
    • 亲测正确版-win32汇编贪吃蛇源码-win22汇编游戏源码
      win32汇编实现贪吃蛇 win32汇编多文件程序设计 亲测正确版-win32汇编贪吃蛇源码-win22汇编游戏源码 ...汇编语言实现动态链表 以对话框做窗口模板并做为主界面 开发工具 ollydbg + MASM32 + gVim + NMAKE + ResEd
    • 培训资料,数据结构
      嵌入式培训资料,数据结构,介绍了动态数组, 链表, 栈, 队列, 哈希表,广义表, 二叉树等。
    • Educational-administration-system:学校教务系统管理项目
      开发工具:vim,gcc,gdb 项目描述: 0.使用链表从文件中读入教师信息、学生信息 1.登陆分学生登陆,教师登陆,管理员登陆,密码不回显。三次输入密码 错误强制关闭。 2.管理员拥有修改、查找、删除等功能权限,能够添加...
    • 小型通讯录程序c语言链表实现(源代码)
      小型通讯录程序c语言链表实现(源代码) CentOS下vim编辑器gcc编译器
    • leetcode下载-CppPracticeCode:Cpp实践代码
      3.使用current指针遍历链表同时index_c++ 4.遍历时判断index_m是否小于1/2 * index_c如果是则让middle指针前进并让index_m++直到index_m = 1/2*index_c 5.遍历结束后current指向的即为中间元素 */ Node *...
    • win32汇编实现贪吃蛇
      win32汇编实现贪吃蛇 win32汇编多文件程序设计 汇编语言实现动态链表 以对话框做窗口模板并做为主界面 开发工具 ollydbg + MASM32 + gVim + NMAKE + ResEd
    • CST8234-Assignment-1:CST8234“C语言和网络编程”中的作业#1 - 粒子系统
      使用 Vim 用 C 语言编写,我创建的粒子系统允许粒子在到达窗口边界时通过将它们的位置递增地乘以 -1 来“反弹”边界。 这会导致粒子向后移动,直到撞到另一端,在这种情况下,它们将再次从墙壁上反弹并重复。 打开...
    • test.tar.gz
      简易的图书管理系统用vim,直接运行a.out
    • leetcode下载-leetcode-master:leetcode大师
      leetcode下载 重要通知! 攻略里每篇文章都是公众号的文章链接,之前是为了方便,可随着star和fork的同学越来越多,发现文章链接的话没有办法及时修改题解,大家也没法参与进来,所以近期我会...链表-> 哈希表->字符串-
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档