c语言课设之学生成绩管理系统

文章目录

  • 前言
  • 一、成绩管理系统的系统功能模块图
  • 二、具体代码
    • 1、头文件
    • 2、主函数
    • 3、f1.c文件
    • 4、f2.c文件
    • 5、f3.c文件
    • 6、f4.c文件
    • 7、f5.c文件
    • 8、f6.c文件
    • 9、f7.c文件
  • 三、运行效果图

前言

提示:大一第一次写课设,刚开始特别紧张,感觉无从下手,也是看了很多学长们的博客才慢慢理解如何去做,这篇博客既是对自己的总结,也希望能够帮到有需要的人。


一、成绩管理系统的系统功能模块图

二、具体代码

1、头文件

void f1(int n);
void f2(int n);
void xmcx(int n);
void xhcx(int n);
void f3(int n);
void f4(int n);
void f5(int n);
void f6(int n);
void dkzs(int n);
void pjfzs(int n);
void f7(int n);
/*用于从存储学生信息的文件中读取信息,写入信息等操作*/
struct student {char xh[10];char name[20];int banji = 0;int kemu[3];
};
/*用于平均分,姓名,学号的写入与后续读出*/
struct average {char sxh[10];char sname[20];float pingjunfen;
};
/*用于登录和注册*/
struct yonghumima {char yonghuming[20];char password[20];
};

2、主函数

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"main.h"
int main()
{int slabel = 1;int n = 60;/*总人数,用于函数传递很方便*/while (slabel==1) {int c;/*登录和注册界面*/printf("-----欢迎使用博客作业登录系统-----\n");printf("|--1:用户登录:                |\n");printf("|--2:用户注册:                |\n");printf("|--0:退出:                    |\n");printf("------------------------------\n");scanf("%d", &c);/*选择登录、注册或退出*/switch (c) {case 1: {int label = -1;int h, i;struct yonghumima shi;struct yonghumima shuru;/*打开已经设定好的用户名和密码文件,用于后面的登录*/FILE* fp;if ((fp = fopen("C:\\mima.txt", "r")) == NULL){printf("File open error!\n");exit(0);}fscanf(fp, "%s%s", &shi.yonghuming, &shi.password);fclose(fp);printf("请输入用户名和密码(用空格隔开):\n");/*这个循环是设定可尝试的次数并进行相应提醒*/for (i = 0; i < 5; i++){scanf("%s %s", &shuru.yonghuming, &shuru.password);if (strcmp(shi.yonghuming, shuru.yonghuming) == 0 && strcmp(shi.password, shuru.password) == 0){printf("登录成功!!!\n");slabel = -1;label = 1;break;}if (i < 4){printf("请重新输入用户名和密码(剩余%d次机会):\n", 4 - i);}if (i == 4)printf("输入错误的次数太多,需要重新注册账号和密码!!!\n");}/*使用while而不使用if是因为while又构成了一个循环,后面switch(h)时的break就不会相当于退出系统即输入零的效果*/while (label == 1){printf("-------欢迎进入博客作业统计系统-------\n");printf("|-1:返回菜单:                         |\n");printf("|-2:展示班级作业情况:                 |\n");printf("|-3:展示个人成绩:                     |\n");printf("|-4:修改成绩:                         |\n");printf("|-5:删除信息:                         |\n");printf("|-6:统计平均分并写入文件:             |\n");printf("|-7:展示分数小于60分同学信息:       |\n");printf("|-8:完成数据统计:                     |\n");printf("|-0:退出系统:                         |\n");printf("--------------------------------------\n");scanf("%d", &h);if (h == 0) {printf("感谢使用博客统计系统!!!\n");break;}switch (h){case 1: break;case 2:f1(n); break;case 3:f2(n); break;case 4:f3(n); break;case 5:f4(n); break;case 6:f5(n); break;case 7:f6(n); break;case 8:f7(n); break;}}break;/*这个break主要用于退出系统时在跳出case 1的循环*/if (label != 1){slabel = -1;break;}/*用于用户名和密码5次输入错误后关闭系统*/}; break;case 2: {int m;printf("----1:注册:\n");printf("----0:退出:\n");scanf("%d", &m);switch (m){case 1: {FILE* fp;struct yonghumima zhuce;if ((fp = fopen("C:\\mima.txt", "w")) == NULL){printf("File open error!\n");exit(0);}printf("请输入您想使用的用户名和密码:(用空格隔开):\n");scanf("%s %s", &zhuce.yonghuming, &zhuce.password);rewind(fp);fprintf(fp, "%s %s", zhuce.yonghuming, zhuce.password);fclose(fp);printf("注册成功,即将进入初始界面,可使用您注册的账号密码登录!!!\n");}; break;case 0:break;default:printf("输入错误!!!\n"); break;}}; break;case 0: {slabel = -1;printf("感谢使用博客统计系统!!!\n");break;}default:printf("输入错误!!!\n"); break;}}
}

我设计的主函数有两个主要的模块,包括登录注册模块和成绩管理模块。最主要的操作是对于文件的读取和写入,最重要的结构是利用多层switch结构和设立标签。登录就是打开读入已经存储的账号密码文件数据,然后将其与输入的账号密码比较,相同则进入第二模块,并且利用for循环设立只有5次输入账号密码的机会。注册模块则是用读写打开文件,将输入的账号密码写入文件,及注册成功。第二模块就是利用switch选择调用不同的函数来解决问题。

3、f1.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f1(int n)
{struct student stu[60];int sbanji;int skemu;int i, a, label = -1;FILE* fp;if ((fp = fopen("C:\\chengji.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}printf("----1:展示:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {printf("请输入班级:(1,2班)\n");scanf("%d", &sbanji);printf("请输入作业科目:(分为1,2,3共3科)\n");scanf("%d", &skemu);for (i = 0; i < n; i++){if (stu[i].banji == sbanji && skemu <= 3 && skemu >= 1) {label = i;}}if (label == -1)printf("输入的班级或科目有误!!!\n");else{for (i = 0; i < n; i++)printf("%d\n", stu[i].kemu[skemu - 1]);}}case 0:break;default:printf("输入错误!!!\n"); break;}
}

利用标签确定输入的数据是否合理,利用if判断是否进行后续操作还是利用break退出循环。

4、f2.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f2(int n) {int k;printf("----请选择查询类型:\n");printf("----1:按姓名查询:\n");printf("----2:按学号查询:\n");printf("----0:退出:\n");scanf("%d", &k);switch (k){case 1:xmcx(n); break;case 2:xhcx(n); break;case 0:break;default:printf("输入错误!!!\n"); break;}
}
void xhcx(int n)
{struct student stu[60];char num[10];int i, a, label = -1;FILE* fp;if ((fp = fopen("C:\\chengji.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}printf("----1:查询:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {printf("请输入学号:\n");scanf("%s", &num);for (i = 0; i < n; i++){if (strcmp(num, stu[i].xh) == 0) {label = i;break;}}if (label == -1)printf("输入的学号无对应的学生信息\n");elseprintf("%s %s %d %d %d %d\n", stu[label].xh, stu[label].name, stu[label].banji, stu[label].kemu[0], stu[label].kemu[1], stu[label].kemu[2]);}; break;case 0:break;default:printf("输入错误!!!\n"); break;}if (fclose(fp)) {printf("Can not close the file!\n");exit(0);}
}
void xmcx(int n)
{struct student stu[60];char sname[20];int i, a, label = -1;FILE* fp;if ((fp = fopen("C:\\chengji.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}printf("----1:查询:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {printf("请输入姓名:\n");scanf("%s", &sname);for (i = 0; i < n; i++){if (strcmp(sname, stu[i].name) == 0) {label = i;break;}}if (label == -1)printf("输入的学号无对应的学生信息\n");elseprintf("%s %s %d %d %d %d\n", stu[label].xh, stu[label].name, stu[label].banji, stu[label].kemu[0], stu[label].kemu[1], stu[label].kemu[2]);}case 0:break;default:printf("输入错误!!!\n"); break;}if (fclose(fp)) {printf("Can not close the file!\n");exit(0);}
}

此文件包含三个函数:
1、利用switch结构进入选择查找方式界面。
2、打开存储学生信息的文件,利用结构体数组,将输入的学号与读入的学号比较,若合理则展示对应学号的数据,否则输出该学号无对应的信息。
3、打开存储学生信息的文件,利用结构体数组,将输入的姓名与读入的姓名比较,若合理则展示对应学号的数据,否则输出该学号无对应的信息。

5、f3.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f3(int n)
{struct student stu[60];char sxh[10];int i, a;int num = -1;FILE* fp;if ((fp = fopen("C:\\chengji.txt", "r+")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}printf("----1:修改:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {printf("请输入要修改学生的学号:\n");scanf("%s", &sxh);struct student std;for (i = 0; i < n; i++){if (strcmp(sxh, stu[i].xh) == 0) {num = i;break;}}if (num == -1)printf("输入的学号无对应的学生信息\n");else{printf("修改的信息学号,姓名,班级,科目一,科目二,科目三分别为:(用空格隔开)\n");scanf("%s %s %d %d %d %d", &std.xh, &std.name, &std.banji, &std.kemu[0], &std.kemu[1], &std.kemu[2]);strcpy(stu[i].xh, std.xh);strcpy(stu[i].name, std.name);stu[i].banji = std.banji;stu[i].kemu[0] = std.kemu[0];stu[i].kemu[1] = std.kemu[1];stu[i].kemu[2] = std.kemu[2];rewind(fp);for (i = 0; i < n; i++){fprintf(fp, "%s %s %d %d %d %d\n", stu[i].xh, stu[i].name, stu[i].banji, stu[i].kemu[0], stu[i].kemu[1], stu[i].kemu[2]);}if ((strcmp(std.xh, stu[num].xh) == 0) && (std.kemu[1] == stu[num].kemu[1]))printf("修改成功!!!\n");}}; break;case 0:break;default:printf("输入错误!!!\n"); break;}fclose(fp);
}

打开存储学生信息的文件,利用结构体数组,将要修改信息的学号输入并与读入的学号对比,若存在则可输入要修改的信息进行修改,否则输出该学号无对应的信息。

6、f4.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f4(int n)
{char xh1[10];struct student stu[60];struct student std[60];int i, a;int num = -1;FILE* fp;if ((fp = fopen("C:\\chengji.txt", "r+")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}printf("----1:删除:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {printf("请输入要删除学生的学号:\n");scanf("%s", xh1);for (i = 0; i < n; i++){if (strcmp(xh1, stu[i].xh) == 0){num = i;break;}}if (num == -1)printf("输入的学号无对应的学生信息\n");else{for (i = 0; i < n - 1; i++){if (i < num)std[i] = stu[i];elsestd[i] = stu[i + 1];}rewind(fp);for (i = 0; i < n - 1; i++){fprintf(fp, "%s %s %d %d %d %d\n", std[i].xh, std[i].name, std[i].banji, std[i].kemu[0], std[i].kemu[1], std[i].kemu[2]);}printf("删除成功!!!\n");}}; break;case 0:break;default:printf("输入错误!!!\n"); break;}fclose(fp);
}

打开存储学生信息的文件,利用结构体数组,将要修改信息的学号输入并与读入的学号对比,若存在则可输入要修改的信息进行修改,否则输出该学号无对应的信息。

7、f5.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f5(int n)
{struct student stu[60];int i, a;float pingjunfen[60];printf("----1:计算并储存:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {FILE* fp;FILE* fpw;if ((fp = fopen("C:\\chengji.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}for (i = 0; i < n; i++){pingjunfen[i] = (stu[i].kemu[0] + stu[i].kemu[1] + stu[i].kemu[2]) * 1.0 / 3;}if ((fpw = fopen("C:\\average.txt", "r+")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fprintf(fpw, "%s %s %.2f\n", stu[i].xh, stu[i].name, pingjunfen[i]);}fclose(fp);fclose(fpw);printf("计算并保存成功!!!\n");}; break;case 0:break;default:printf("输入错误!!!\n"); break;}
}

打开存储学生信息的文件,利用结构体数组,计算出平均分,然后再打开要写入的文件,将相应信息写入。

8、f6.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f6(int n)
{int i, num;printf("----请选择根据单科成绩或平均分展示信息\n");printf("----1:单科成绩展示\n");printf("----2:根据平均分展示\n");printf("----0:退出\n");scanf("%d", &num);switch (num){case 1:dkzs(n); break;case 2:pjfzs(n); break;case 0:break;default:printf("输入错误!!!\n"); break;}
}
void dkzs(int n)
{struct student stu[60];struct average std[60];int i, a, b = 1;int skemu;printf("----1:展示:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {FILE* fp;FILE* fpw;if ((fp = fopen("C:\\chengji.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}if ((fpw = fopen("C:\\average.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fpw, "%s%s%f", &std[i].sxh, &std[i].sname, &std[i].pingjunfen);}printf("请输入根据哪一科展示(1,2,3共三科)\n");scanf("%d", &skemu);for (i = 0; i < n; i++){if (skemu != 1 && skemu != 2 && skemu != 3){printf("输入科目错误!\n");b = 2;break;}if (stu[i].kemu[skemu] < 60)printf("%s %s %d %d %d %d %.2f\n", stu[i].xh, stu[i].name, stu[i].banji, stu[i].kemu[0], stu[i].kemu[1], stu[i].kemu[2], std[i].pingjunfen);}if (b == 1)printf("展示成功!!!\n");fclose(fp);fclose(fpw);}; break;case 0:break;default:printf("输入错误!!!\n"); break;}
}
void pjfzs(int n)
{int i, a;struct average stu[60];struct student std[60];printf("----1:展示:\n");printf("----0:退出:\n");scanf("%d", &a);switch (a){case 1: {FILE* fp;FILE* fpw;if ((fp = fopen("C:\\average.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%f", &stu[i].sxh, &stu[i].sname, &stu[i].pingjunfen);}if ((fpw = fopen("C:\\chengji.txt", "r")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fpw, "%s%s%d%d%d%d", &std[i].xh, &std[i].name, &std[i].banji, &std[i].kemu[0], &std[i].kemu[1], &std[i].kemu[2]);}for (i = 0; i < n; i++){if (stu[i].pingjunfen < 60)printf("%s %s %d %d %d %d %.2f\n", std[i].xh, std[i].name, std[i].banji, std[i].kemu[0], std[i].kemu[1], std[i].kemu[2], stu[i].pingjunfen);}printf("展示成功!!!\n");fclose(fp);fclose(fpw);}; break;case 0:break;default:printf("输入错误!!!\n"); break;}
}

1、利用switch进入选择以某种方式展示界面。
2、根据输入的科目,利用合适的结构体数组读出学生信息,若不及格,则输出其信息。
3、打开存储平均分和信息的文件,读入,若平均分小于60,则输出其信息。

9、f7.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"main.h"
void f7(int n)
{int a, i, j,c;int count[3][10] = { 0 };struct student stu[60];printf("----1:打印:\n");printf("----0:退出:\n");scanf("%d", &c);switch (c){case 1: {printf("请输入要打印并储存的科目(1,2,3共三门):\n");scanf("%d", &a);if (a == 1 || a == 2 || a == 3) {FILE* fp;if ((fp = fopen("C:\\chengji.txt", "r+")) == NULL){printf("File open error!\n");exit(0);}for (i = 0; i < n; i++){fscanf(fp, "%s%s%d%d%d%d", &stu[i].xh, &stu[i].name, &stu[i].banji, &stu[i].kemu[0], &stu[i].kemu[1], &stu[i].kemu[2]);}for (i = 0; i < n; i++){if (stu[i].kemu[a - 1] >= 0 && stu[i].kemu[a - 1] <= 9)count[a - 1][0]++;if (stu[i].kemu[a - 1] >= 10 && stu[i].kemu[a - 1] <= 19)count[a - 1][1]++;if (stu[i].kemu[a - 1] >= 20 && stu[i].kemu[a - 1] <= 29)count[a - 1][2]++;if (stu[i].kemu[a - 1] >= 30 && stu[i].kemu[a - 1] <= 39)count[a - 1][3]++;if (stu[i].kemu[a - 1] >= 40 && stu[i].kemu[a - 1] <= 49)count[a - 1][4]++;if (stu[i].kemu[a - 1] >= 50 && stu[i].kemu[a - 1] <= 59)count[a - 1][5]++;if (stu[i].kemu[a - 1] >= 60 && stu[i].kemu[a - 1] <= 69)count[a - 1][6]++;if (stu[i].kemu[a - 1] >= 70 && stu[i].kemu[a - 1] <= 79)count[a - 1][7]++;if (stu[i].kemu[a - 1] >= 80 && stu[i].kemu[a - 1] <= 89)count[a - 1][8]++;if (stu[i].kemu[a - 1] >= 90 && stu[i].kemu[a - 1] <= 100)count[a - 1][9]++;}for (j = 0; j < 10; j++) {for (i = 0; i < count[a - 1][j]; i++){printf("* ");}if (j == 9)printf("%d——%d  共%d个人\n", 10 * j, 10 * (j + 1), count[a - 1][j]);elseprintf("%d——%d  共%d个人\n", 10 * j, 10 * (j + 1) - 1, count[a - 1][j]);}}elseprintf("输入的科目信息有误!!!\n");}; break;case 0:break;default:printf("输入错误!!!\n"); break;}
}

根据选择的科目,利用多个if计算出每段的人数,利用循环输出对应个数的*号。

三、运行效果图









好的,本次课设分享就到此结束了,感谢您的阅读。

成绩管理系统课程设计相关推荐

  1. java成绩管理系统论文总结,JAVA论文成绩管理系统课程设计

    JAVA论文成绩管理系统课程设计 课课 程程 设设 计计 论论 文文 基于基于 JAVAJAVA 的学生成绩管理系统的设计与实现的学生成绩管理系统的设计与实现 学生姓名学生姓名 学学 号号 年级专业年 ...

  2. 数据库学生成绩管理系统课程设计

    1.概述 学生成绩管理是一个学校不可缺少的部分,一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段.学生成绩管理系统对学校加强学生管理有着极其重要的作用.由于各个大学都在持续扩招, ...

  3. 学生成绩管理系统——课程设计报告

    学期末课程设计的作业,利用链表和文件的操作.日后再完善一些功能介绍. /************************************* *******程序名称:学生成绩管理系统 ***** ...

  4. c语言利用指针函数等完成学生成绩管理系统,课程设计C语言可视化程序学生成绩管理系统...

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

  5. php简单学生管理系统设计与实现,基于PHP的学生成绩管理系统的设计与实现.doc...

    基于PHP的学生成绩管理系统的设计与实现.doc 基于PHP的学生成绩管理系统的设计与实现 摘 要: 我国高等职业教育迎来了蓬勃发展的新局面,各院校招生规模不断扩大,学校的教学管理负担越来越重.为了提 ...

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

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

  7. 学生管理系统课程设计

    学生管理系统课程设计 文章目录 一.课程设计目的 二.课程设计内容和要求 三.任务完成情况 四.设计报告 4.1需求分析 4.1.1用户需求 4.2概要设计 4.2.1总体设计 4.2.2各功能函数的 ...

  8. 期末课设—学生成绩管理系统的设计与实现—大作业

    课程 面向对象课程设计 题目 学生成绩管理系统的设计与实现 主要内容.基本要求.主要参考资料等 一.主要内容 本次课程设计主要完成学生宿舍管理系统的设计与开发.对学生宿舍管理系统的需求进行任务分解,完 ...

  9. ssm学生成绩管理系统的设计与实现毕业设计源码070942

    摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设学生成绩 ...

最新文章

  1. java---数字排序
  2. AngularJS 拦截器和好棒例子
  3. 全球及中国商用杠铃架行业营销策略及投资建议分析报告2021-2027年版
  4. cesium 经纬度绘制点_炫酷大屏地图自定义绘制(一)
  5. Idea插件——Translation 翻译插件安装与使用
  6. R之Excel文件读取与程序包的安装调用
  7. x86平台堆栈优化问题
  8. jQuery Live Query 插件
  9. react15源码简析(分享PPT)
  10. CSS实现水平垂直居中的1010种方式
  11. JS-获取当前URL的参数
  12. 木讷的程序员需要知道的事情 (八)
  13. HashMap常见面试题
  14. volatility命令
  15. SSL证书中DV、OV、EV证书的区别有哪些
  16. STM32F103C8T6 操作矩阵键盘
  17. 什么是SSH 以及常见的ssh 功能
  18. 从2020年十大勒索攻击事件聊聊企业安全“防盗”新思路
  19. vim 修改文件出现错误“E45: 'readonly' option is set (add ! to override)”
  20. Matlab Function输入输出

热门文章

  1. RabbitMQ 面试题目整理
  2. 2022长安杯赛后复现
  3. Oracle那些年那些事儿
  4. 大数据就是非相关数据的相关性
  5. CSS 弹性盒子布局详解
  6. Acer Linux改win7,宏基台式机win10如何改win7系统_宏基台式机预装win10怎么换win7
  7. android 4.4 锁屏密码,安卓手机忘记锁屏密码怎么办?安卓手机绕过锁屏密码的几种解决方法...
  8. 51单片机C语言程序100例分析(1)IO+C语言+头文件
  9. 验证JDK是否安装成功
  10. Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!