学籍管理系统

  • 功能简介
  • 界面功能展示
  • 具体实现的方法
    • 1.界面
      • gotoxy()函数定义
    • 2.多文件管理
      • 分多文件管理
      • 头文件
    • 3.链表
      • 数据结构
      • 创建链表
      • 按成绩排序查询
    • 4. 文件存储
    • 5. 加密
  • 附录

功能简介

  • 链表实现基本的创建和增删改查。

  • 成绩分析,链表的冒泡排序。

  • 分管理员,老师,学生三端管理,密码的修改,加密。

  • 分班级管理老师学生。

  • 方框界面,↑↓键控制,ENTER键确认。

界面功能展示

主界面

管理员登录

管理老师信息

管理学生信息

添加学生

成绩查询

具体实现的方法

1.界面

界面实现由↑↓控制选择,ENTER键确认。

这里用到了c语言光标移动函数gotoxy()。

gotoxy()函数定义
void gotoxy(int x, int y)
{ COORD coord = {x, y};SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

命令行的列为x轴,行为y轴。
例如使用 gotoxy(10,5); 语句表示将光标移动到第十列,第五行。

先在第一个选项上打印出白框。

然后用getch();无缓冲读取用户的键盘输入。

用if判断,如果读取值的为↓键的ASCII码,则分别调用gotoxy(int x, int y)让光标跳到该白框的上面部分,中间部分和下面的部分的开头,打印一串空格覆盖掉白框,然后再调用gotoxy(int x, int y)让光标移动到下一个选项,分别打印出白框。除此之外还需再定义一个开关值,int key = 1, 然后每读取一次↓键,则key++,记录选中的选项,最后根据key的值再调用不同的函数。

如果判断为↑键,则同理。

还可以利用key值做特殊的判断,如果key的值为1且读入↑键,则让光标跳到最下面的选项打印白框,可以让白框循环移动。或者可以用取余数的办法, 例如一共有5个选项,则可以将每次key的值余6,便可使选框框循环移动。

附上一小段界面代码
按自己的思路写的,有点乱。仅供参考。

void zhujie() {char c;                                     // 用来读取键盘的输入int key = 1, x = 38 , y = 7;                // key值记录选项, x,y为初始的坐标,可根据自己系统具体而确定。/*   打印界面  */printf("     --------------------------------------------------------------------------------------------------------------\n");printf("     |                                           学生信息管理系统                                                 |\n");printf("     --------------------------------------------------------------------------------------------------------------\n");printf("     |           请选择身份:                                                                                     |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                     ============================                                           |\n");printf("     |                                     |         1.管理员         |                                           |\n");printf("     |                                     ============================                                           |\n");printf("     |                                                                                                            |\n");printf("     |                                               2.老师                                                       |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                               3.学生                                                       |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                               4.退出程序                                                   |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                                                                                            |\n");printf("     |                                                                   ↑↓控制       ENTER  确认               |\n");printf("     --------------------------------------------------------------------------------------------------------------\n");c = getch();          // 先从键盘读取一个指令                    while( c != 13) {     //  如果不是回车循环进行,如果是回车的话直接跳出循环进行下一步判断 。if (c == 80 && key <= 4) {       // 判断如果读取的是↓键if(key == 4)                 // 如果已经是最后一个选项,又按了↓键,则跳到最上面key = 0;                     // 让key = 0 之后key会自增,就循环记录了第一个选项。gotoxy(43, y);               // 下面是打印空格替换先前的白框,puts("                             ");gotoxy(43, y+1);puts(" ");gotoxy(70, y+1);puts(" ");gotoxy(43, y+2);puts("                             ");if(key == 0)                 // 这里如果key等于0 则说明要从最后一行跳到第一行,让y等于4跳到第一行。y = 4;               gotoxy(43, y+3);             //打印白框puts("============================");gotoxy(43, y+4);puts("|");gotoxy(70, y+4);puts("|");gotoxy(43, y+5);puts("============================");key++;                      // 因为判断为↓键,所以开关值加一,记录到下一个选项。y += 3;                     // 坐标跳到下一个白框位置gotoxy(0,28);}if (c == 72 && key >= 1){       //判断如果是↑键, 与上面同理。if(key == 1)key = 5;gotoxy(43, y);puts("                             ");gotoxy(43, y+1);puts(" ");gotoxy(70, y+1);puts(" ");gotoxy(43, y+2);puts("                             ");if(key == 5)y = 19;gotoxy(43, y-1);puts("============================");gotoxy(43, y-2);puts("|");gotoxy(70, y-2);puts("|");gotoxy(43, y-3);puts("============================");key--;y -= 3;gotoxy(0,28);}c = getch();           //最后再读取一次键盘,循环判断,直到是回车(ASCII码为13)为止。}if (key == 1) denglu1();  // 这里跳出while 根据开关量决定进入哪个函数。if (key == 2) denglu2();if (key == 3) denglu3();if (key == 4) {gotoxy(0, 80);exit(0) ; }
}

其他界面的实现可参考这个,都用的是gotoxy()函数。

2.多文件管理

可建立一个工程,分多文件来写管理系统,每个模块写一个文件,并添加一个头文件,方便管理查询。

分多文件管理

头文件


3.链表

数据结构
/*学生链表*/
struct ms {                                 // 学生信息和成绩 (数据域)char name[100];char sex[10];char number[10];int lisan;int math;int english;int c;int sum;int ban;char m[10]; float avrg;
};
typedef struct lian {                       // 链表结构struct ms item ;                        // 数据域  这里分开两个域便于值的交换struct lian * next ;                    // 指针域
} lian;/* 老师链表*/
struct tems {                               // 老师信息char name[100];                          char z[21];char m[21];int ban;
};typedef struct telian {                       // 老师链表 struct tems teitem;struct telian * next;
}telian;
创建链表
/*返回结构指针的函数,返回创建的结构指针。也可用结构指针的指针当做函数的参数来传递值 */
lian * creat ()                             {                                          //创建学生链表 带头节点struct lian   * current =  NULL;current = (struct lian *)malloc(sizeof(struct lian));current->next = NULL;return current;
}telian * creat2 () {                         //创建老师链表 带头结点struct telian   * current =  NULL;current = (struct telian *)malloc(sizeof(struct telian));current->next = NULL;return current;
}
按成绩排序查询

这里用的是优化后的链表的冒泡排序。这里按照sum(总分)进行排序,更换sum即可以按其他科目排序。

void sortsum() {                           //冒泡排序链表struct lian  * current =  head->next; // 带头结点的链表,head->next 为第一个节点/* 这里头指针head是在所有函数外声明的,具有文件作用域,可以再任意函数里直接使用 */struct lian t;                        // 用于赋值交换int ch = 1 , y=7;                     // ch为优化后的冒泡的开关量。if ( current == NULL )                // 判断链表是否为空{/* 这里打印提示信息, 说明链表没有成员。*/}while (ch) {                         //冒泡排序,ch判断有无交换。ch = 0;while (current->next != NULL) {  // 节点遍历比较if ( current->item.sum < current->next->item.sum){t.item = current->item;  // 结构可直接赋值, 交换current->item = current->next->item;current->next->item = t.item ;ch = 1;                 // 标记交换,还需继续循环}current = current->next ;}}
}

4. 文件存储

这里是用fwrite和fread以二进制一次性存储链表和读取链表,其他的增删改查操作都是用链表实现的。

void cun() {struct lian * current =  head->next;FILE * fp;fp = fopen("lian.txt","w");  if (fp == NULL) {}while (current != NULL) {fwrite(current,sizeof(struct ms),1,fp);    //二进制依次写入current = current->next;} fclose(fp);
}}void cun2() {struct telian * current =  head2->next;FILE * fp;fp = fopen("laolian.txt","w");if (fp == NULL) {}while (current != NULL) {fwrite(current,sizeof(struct tems),1,fp);current = current->next;} fclose(fp);
}void du() {struct lian  * prev = head, * current =  NULL;int shu = 0;FILE * fp;fp = fopen("shu.txt","r");  /* 这个文件存的是链表节点,也就是成员的数量,因为fread读取时要输入数量,所以单独存一下。*/if (fp == NULL) {/*这里写打开失败的提示*/}fscanf(fp,"%d",&shu);fclose(fp); fp = fopen("lian.txt","r");    // 打开存链表的文件if (fp == NULL) {/* 打开失败的提示 */}while(shu--){                                            //  读的次数。current = (struct lian *)malloc(sizeof(struct lian));//  添加节点。fread(current,sizeof(struct ms),1,fp);               //  读取,一次读取一个节点。prev->next = current; current->next = NULL;prev = current;}fclose(fp);
}

5. 加密

这里的管理员不能从程序里更改,需要自行更改文件目录里的文件。
一个简单的根据ASCII码加密解密的函数

注: 自己实现的并不是很规范,可以去网上了解MD5加密算法。

void jiami(char x[]) {for (int i = 0; i < strlen(x); i++) {x[i] = x[i] + 10 + i; }}
void jiemi(char x[]) {for (int i = 0; i < strlen(x); i++) {x[i] = x[i] - 10 - i; }
}

单独写一个程序跑一下加密的函数,然后把结果复制到文件夹里的对应文件里就行了。

账号密码用空格隔开

这里管理员默认账号密码都为admin

附录

github-项目代码

【C语言】学籍管理系统相关推荐

  1. C语言课程学籍管理课程书面报告,C语言学籍管理系统课程设计报告书

    <C语言学籍管理系统课程设计报告书>由会员分享,可在线阅读,更多相关<C语言学籍管理系统课程设计报告书(30页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计课程设计报告学 ...

  2. c语言用数组编写学籍管理程序,c语言学籍管理系统实验报告.docx

    c语言学籍管理系统实验报告.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  3. c语言学籍管理系统实训作业,学籍管理系统C语言实训报告

    学籍管理系统C语言实训报告 实训报告 课程名称: C语言程序设计课设 项目名称: 学籍管理系统 学 院: 专 业: 姓 名: 学 号: 指导教师: 成 绩: 目录 1 问题提出 ........... ...

  4. c语言—学籍管理系统

    c语言课程设计-学籍管理系统 学校的课程设计,自己完成后整理了一下. 自己用链表实现的一个较简单的学籍管理系统,都是通过一些链表以及文件的基本操作完成. 功能实现 1-录入学生信息. 2-查询学生信息 ...

  5. c语言学籍管理系统小程序,学籍业务办理系统(开源 v2.0发布 优化代码,增加小程序端)...

    更新说明: 1.此2.0版,大幅度优化代码,增加小程序端方便使用 2.v1.0测试地址已关,请勿测试 学生在校期间避免不了要和各种证明打交道,比如学籍证明.转专业申请.休学申请.退学申请等等.此类业务 ...

  6. c语言学籍管理系统1.0,C语言学籍管理系统源代码

    #include #include #include #define true 1 struct student//声明一个结构体类型 { char name[60];//姓名 char ID[7]; ...

  7. C语言编程学生学籍登录窗口,C语言实现学生学籍管理系统

    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include //*********** ...

  8. c语言学籍管理实验报告,c语言实验报告(学生学籍管理系统)

    c语言实验报告(学生学籍管理系统) (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 实实 验验 报报 告告学学 生生 学学 籍籍 ...

  9. c语言学生学籍管理修改,C语言课设之学生学籍管理系统.doc

    C语言课设之学生学籍管理系统.doc 题目学生学籍管理系统 目录一.个人简介.二.报告摘要.三.报告目录.四.报告正文. 1.系统需求分析 2.系统总体设计 3.系统详细设计六.总结. 二.报告摘要 ...

最新文章

  1. 天顶角Zenith方位角Azimuth
  2. 外卖ERP管理系统(二)
  3. boost::coroutine2模块实现协程的测试程序
  4. 电脑计算机的硬盘那些可以删除吗,我的电脑出现多个可移动磁盘该怎么删除?...
  5. java 集合 CopyOnWriteArrayList
  6. C# 修改项目文件夹名称完全版
  7. 计算机小知识分享,分享几小个计算机操作技巧
  8. jQuery 1.11 / 2.1 beta 版发布
  9. carbondata 1.1.0安装文档
  10. 【超图+CESIUM】【基础API使用示例】31、超图|CESIUM -【坐标转换】屏幕坐标转世界坐标
  11. 热敏打印机的工作原理
  12. OppoR17被查找手机锁死问题解锁
  13. mysql in数量限制_SQL语句中in的个数限制为1000
  14. java数字大小排序_怎么用java给数字排大小?
  15. visio画卷积核,网格
  16. 半阳不阳后的一些总结
  17. StyleGAN 调整面部表情,让虚拟人脸更生动
  18. 安装Ubuntu13.10后的首要事情
  19. 东东动态夏目猫咪老师404官网html源码
  20. android alarmmanager后台,Android各版本AlarmManager使用

热门文章

  1. 笔记-中项/高项学习期间的错题笔记1
  2. r语言nonzerocoef函数_lars算法R语言操作指南.pdf
  3. 【STM8】PWM 捕获实战:占空比和频率(TIM2)
  4. 【vue+pc端】实现微信扫码登录pc端,后端通过微信开发平台,前端生成二维码(仅供参考)
  5. 来自北京大学NOIP金牌选手yxc的常用代码模板2——数据结构
  6. 第6章第6节:颜色搭配:配色万金油之色相配色方案 [PowerPoint精美幻灯片实战教程]
  7. Code Project
  8. python数学库函数包括求最大公约数函数吗_pythonmathcot函数_math库是python语言的数学模块吗_Python中的数学模块:...
  9. 解决viewpager setCurrentItem 白屏问题
  10. 2565: 最长双回文串