一、2.0版更新

  1. 全局变量list改为参数传递的形式。
  2. 只有修改学生信息后才会重写文件。
  3. 增加注册登录功能,每个用户操作不同链表,为每个用户生成不同的文件,每个用户独立操作的链表存储到不同文件中。
  4. 修改背景和字体颜色。
  5. 增加管理员功能,可查看、修改每位用户的用户名、密码等信息。

二、需要巩固的知识点

     while(scanf("%d%s%d%s%s",&temp.po,temp.name,&temp.age,temp.sex,temp.tel)!=5){fflush(stdin);                                                              /*以免影响下一次输入*/printf("您输入的数据不正确,请重新输入正确信息\\n");continue;}

scanf的返回值是参数被成功赋值的个数。

若是po,name,age,sex,tel都被成功读入,那么scanf返回值为5,如果只有其中一项如po被成功读入,返回值为1,两项被成功读入如po和name,那么返回值为2。如果5项都没有成功读入,则返回值为0。如果遇到错误或遇到end of file,返回值为EOF。如果if (scanf("%f",&a) == 1) 如果输入一个浮点型的数,那么就会返回 1 ,表示成功读入;如果返回结果不是 1 ,就表示输入的值与 %f 不符,如果输入的一个数符合float,那么就往下执行,否则不执行。

我这段代码的意思是,输入给临时学生结点的5个信息都正确且被成功赋值,循环结束执行下一步,否则打印错误信息,继续执行循环直到5个信息都被成功赋值。

  1. fopen()开文件,"w"如果文件存在,那么清空文件内容,"a"为追加
  2. 打开文件出错时,fopen() 将返回一个空指针
  3. !=EOF,EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。while(fscanf(fp,"%d\t%s\t%d\t%s\t%s",&temp.po,[temp.name](http://temp.name/),&temp.age,temp.sex,temp.tel)!=EOF)直到读到文件尾部。
  4. strcmp的返回值
    字符串1=字符串2,返回值=0;
    字符串2>字符串2,返回值>0;
    字符串1<字符串2,返回值<0。
  5. 结构体数组赋值用strcpy
  6. 字符串拼接用strcat
  7. 定义一个指向函数的指针,被指向的函数有一个整型参数并返回整型值int (*pfunc) (int);
    定义一个包含10个指针的数组,其中包含的指针指向函数,这些函数有一个整型参数并返回整型值
int (*pfunc) (int);
int (*arr[10]) (int);arr[0] = pfunc;
  1. int (* (fp4()) [10]) (); 找到变量名fp4,往右是一个无参参数列表,说明fp4是一个函数,接着往左是号,说明函数返回值是一个指针;跳出里层圆括号,往右是[]运算符,说明fp4的函数返回值是一个指向数组的指针,往左是*号,说明数组中包含的元素是指针;跳出外层圆括号,往右是一个无参参数列表,说明数组中包含的元素是函数指针,这些函数没有参数,返回值的类型是int。简言之,fp4是一个返回指针的函数,该指针指向含有10个函数指针的数组,这些函数不接受参数且返回整型值。
  2. 函数指针:typedef void(Func)(AddressBook);,Func是个指针,指向的是返回值为void,参数为AddressBook*的参数
  3. system("color 7C");颜色属性由两个十六进制数字指定 – 第一个为背景,第二个则为前景。
  4. fatal: remote origin already exists. 解决:git remote rm origin

三、代码

#include <stdio.h>
#include <stdlib.h>//其中包含system函数
#include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
#include <string.h>//定义字符数组
#include <math.h>
#include<Windows.h>
typedef struct student                                                      //学生结构信息
{int po;char name[20];int age;char sex[5];char tel[13];
}student;
typedef struct Node                                                         //学生链表结点
{struct student student;struct Node* next;
}Node;
typedef struct userNode                                                     //用户结构体
{char userName[20];char userPassword[20]; struct userNode   * next;
}userNode;
typedef struct userList                                                      //用户List
{userNode users[16];int size;
}userList;
void readUserFile(userList* list)
{FILE *fp=fopen("用户信息.txt","r");                       /*开文件*/printf("正在读取用户信息......\n");Sleep(300); char Name[20];char Password[20];if(!fp) {printf("错误:打开用户信息文件失败,可能不存在!\n生成新用户信息文件...\n"); fopen("用户信息.txt","w+");                                }while(fscanf(fp,"%s\t%s\t",&Name,&Password)!=EOF)       /*读文件,把文件中的学生数据全部读入链表结点,以便增删查排改*/{//printf("正在读取用户信息\n");//printf("%s,%s,%d\n",Name,Password,list->size);strcpy(list->users[list->size].userName,Name);//printf("正在读取用户信息1...11...\n");strcpy(list->users[list->size++].userPassword,Password);//printf("%d",list->size);                                                        }fclose(fp);                                                                                        /*关闭文件*/ printf("读取用户信息完毕!\n");Sleep(1000);return ;
}
void writeUserToFile(userList* userList)
{FILE* fp = fopen("用户信息.txt", "w");if (fp == NULL){printf("ERRPR:用户文件写入\n");system("pause");return;}for (int i = 0;i < userList->size;i++){fprintf(fp, "%s\t%s\t\n", userList->users[i].userName, userList->users[i].userPassword);}printf("用户写入完毕!\n");fclose(fp);    return;
}
void addUser(userList* userList)
{system("cls");char name[30];char password[30];printf("-----------------新增用户-------------------\n");printf("请输入新用户名:\n");scanf("%s", name);fflush(stdin);printf("请为新用户设置密码(6-30位):\n");scanf("%s", password);fflush(stdin);while (strlen(password) < 6 || strlen(password) > 30){printf("密码长度不得低于6位,高于30位,请重新输入!\n");scanf("%s", password);fflush(stdin);}//printf("\n%d\n",userList->size);strcpy(userList->users[userList->size].userName, name);strcpy(userList->users[userList->size++].userPassword, password);//printf("\n%d\n",userList->size);printf("添加用户成功!\n");char * fileName = strcat(name,".txt");FILE *fp=fopen(fileName,"w");       fclose(fp);printf("%s",name) ;system("pause");return;
}
void alterUser(userList* list)
{if (list->size == 0){printf("错误:没有管理员用户!\n");system("pause");return;}int i;for ( i = 0;i < list->size;i++){printf("%d.%s\n", i + 1, list->users[i].userName);}printf("请选择您要更改的用户!\n");int choice = -1;scanf("%d", &choice);while (choice <= 0 || choice > list->size){printf("您输入的编号超出正常范围,请重新输入!\n");scanf("%d", &choice);}printf("请输入原密码!\n");char word[20];scanf("%s", word);fflush(stdin);if (strcmp(word, list->users[choice - 1].userPassword) == 0){char newword1[20];char newword2[20];printf("请输入新密码:\n");scanf("%s", newword1);fflush(stdin);while (strlen(newword1) < 6 || strlen(newword1) > 30){printf("密码长度不得低于6位或高于30位,请重新输入!\n");scanf("%s", newword1);}printf("请再次确认新密码:\n");scanf("%s", newword2);if (strcmp(newword1, newword2) == 0){strcpy(list->users[choice - 1].userPassword, newword1);printf("密码修改完成!\n");return;}}else{printf("密码错误!禁止修改!\n");return;}
}void deleteUser(userList* list)
{system("cls");printf("-----------------删除用户-------------------\n");if (list->size == 0){printf("ERROR:没有管理员用户!\n");system("pause");return;}int i;for ( i = 0;i < list->size;i++){printf("%d.%s\n", i + 1, list->users[i].userName);}printf("请选择您要删除的用户!\n");int choice = -1;scanf("%d", &choice);while (choice <= 0 || choice > list->size){printf("您输入的编号超出正常范围,请重新输入!\n");fflush(stdin);scanf("%d", &choice);}char word[30];printf("请输入改用户的原密码:\n");scanf("%s", word);if (strcmp(word, list->users[choice - 1].userPassword) == 0){int i;for ( i = choice;i < list->size;i++){list->users[i - 1] = list->users[i];}list->size--;printf("删除完成!\n");}else{printf("密码错误,禁止删除!\n");}return;
}
char* Login(userList* userList)
{system("cls");printf("-----------------登录-------------------\n");if (userList->size == 0){printf("用户为空!请先注册用户!\n");system("pause");addUser(userList);return NULL;}char name[20];char word[20];int flag = 0;printf("请输入用户名:\n");scanf("%s", name);int i = 0, j = 0;for (i = 0;i < userList->size;i++){if (strcmp(name, userList->users[i].userName) == 0){flag = 1;break;}}if (flag == 0){printf("用户名不存在,程序将退出!\n");exit(0);}printf("请输入登录密码:\n");scanf("%s", word);fflush(stdin); for (j = 0;j < 4;j++){if (strcmp(userList->users[i].userPassword, word) == 0)               //i是上面依照用户名获取的下标 {printf("登录成功!\n");Sleep(1000);return userList->users[i].userName;}if(j!=4) printf("密码错误!您还有%d次输入机会!\n", 4 - j);scanf("%s", word);}printf("3次输入密码错误,程序将退出!\n");exit(0);
}
struct Node* createList()                                                   //创建链表头结点
{struct Node* head= (struct Node*)malloc(sizeof(struct Node));head->next=NULL;return head;
}
struct Node* createNode(struct student data)                                //创建结点
{struct Node* nNode= (struct Node*)malloc(sizeof(struct Node));nNode->student= data;nNode->next= NULL;return nNode;
} void insertNodebyhead(struct Node*headNode,struct student data)               /*头插结点 不用遍历 */
{struct Node*newNode = createNode(data);newNode->next = headNode->next;headNode-> next= newNode;
}
void printUser(userList* list)
{system("cls");if (list->size == 0){printf("用户数为0!\n");system("pause");return;}int i;for ( i = 0;i < list->size;i++){printf("%d\t%s\n", i + 1, list->users[i].userName);}return;
}
void printList (struct Node* L)                                             /*输出链表中全部学生信息*/
{struct Node*p=L->next;if(p == NULL){printf("还没有录入学生信息,请先输入学生信息\n");return ;}printf("-----------------查询到全体学生信息如下-------------------\n");printf("序号\t姓名\t年龄\t性别\t电话\n");while (p){printf("%d\t%s\t%d\t%s\t%s\n",p->student.po,p->student.name,p->student.age,p->student.sex,p->student.tel);p = p->next;}printf("\n");
}
void showmenu0(){                                                           /*打印主菜单*/system ("cls");printf("-----------------------【学生信息管理系统】-----------------------");printf("\n*-*-*-*-*-*-*-*-*-*-* 0.退出 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 1.登录 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 2.注册 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n");printf("\n 请按键选择,回车确定\n");printf("\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
}
void showmenu1(){                                                           /*打印主菜单*/system ("cls");printf("-----------------------【学生信息管理系统】-----------------------");printf("\n*-*-*-*-*-*-*-*-*-*-* 0.退出 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 1.查看全部学生信息 *-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 2.录入学生信息 *-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 3.删除学生信息(按姓名) *-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 4.排序学生信息(按学号) *-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 5.查询学生信息(按学号) *-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 6.更改学生信息 *-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n*-*-*-*-*-*-*-*-*-*-* 7.管理用户信息 *-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n");printf("\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");printf("\n 请按键选择,回车确定\n");printf("\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
}void swapnodestr(struct Node*m,struct Node*n){struct student tempdata=m->student;m->student=n->student;n->student=tempdata;
}void stolsort(struct Node*head){struct Node*p=head,*q;for(p=head->next;p;p=p->next){for(q=p->next;q;q=q->next){if(q->student.po<p->student.po){swapnodestr(q,p);}}}
}
void stolsort1(struct Node*head){struct Node*p=head,*q;for(p=head->next;p;p=p->next){for(q=p->next;q;q=q->next){if(q->student.po>p->student.po){swapnodestr(q,p);}}}
}
void deNode(struct Node* L,char*name){                                      /*找到学生姓名后删除结点*/ struct Node*p1=L;  struct Node*p2=L->next;if(p2==NULL){printf("输入学生姓名后才能完成删除\n");return ;}while(strcmp(p2->student.name,name)){p1=p2;p2=p2->next;if(!p2){printf("未找到指定位置无法删除!\n");return ; }}//找到p1->next=p2->next;free(p2);
}struct Node* searchdatabyname(struct Node* L,char *name){                          /*按姓名,查找学生所在结点*/ struct Node*p=L->next;if(!p){return NULL;                                                  /*找不到在返回空外界打印错误*/}while(strcmp(p->student.name,name)){p=p->next;if(!p){return NULL;                                                      /*外部打印错误信息*/}}return p;                                                             /*找不到在返回空界打印错误*/
}struct Node* searchdatabynumber(struct Node* L,int targetnumber){                      /*按学号,查找学生所在结点*/ struct Node*p=L->next;if(!p){return NULL;                                                  /*找不到在返回空界打印错误*/ }while(targetnumber!=p->student.po){p=p->next;if(!p){return NULL;                                              /*外部打印错误信息*/} }return p;                                                            /*找不到在返回空界打印错误*/
}void readInfor(struct Node*head,const char* filename){         /*读文件函数*/FILE *fp=fopen(filename,"r");                       /*开文件*/printf("正在读取文件......\n");Sleep(300); struct student temp;if(!fp) {printf("错误:打开文件%s失败,可能不存在!\n生成新文件...\n",filename); fopen(filename,"w+");                               }while(fscanf(fp,"%d\t%s\t%d\t%s\t%s",&temp.po,temp.name,&temp.age,temp.sex,temp.tel)!=EOF)      /*读文件,把文件中的学生数据全部读入链表结点,以便增删查排改*/{insertNodebyhead(head,temp);                                                               /*头插所以重新打开出来序号是从大到小的*/ }fclose(fp);                                                                                     /*关闭文件*/
}void writeintofile(struct Node*head,const char* filename) {                                /*往文件中写学生信息*/FILE *fp=fopen(filename,"w");                                                           /*开文件,"w"如果文件存在,那么清空文件内容,"a"为追加*/    struct Node*p=head->next;if (fp == NULL)                                          //打开文件出错时,fopen() 将返回一个空指针{printf("ERRPR:学生文件写入\n");system("pause");return;}while(p){fprintf(fp,"%d\t%s\t%d\t%s\t%s\n",p->student.po,p->student.name,p->student.age,p->student.sex,p->student.tel);                                     /*文件中存入信息*/p=p->next;} printf("学生写入完毕!\n");fclose(fp);                                                                     /*关闭文件*/
} char* keydown0(userList* list){int choice = -1,temp1=-1;fflush(stdin);scanf("%d",&choice);fflush(stdin);struct userNode* tNode; char userName [20],userPassword[20];  int userNumber = 0;        char *userNm;switch(choice){case 0:printf("退出\n");exit(1);case 1:userNm = Login(*&list);printf("\n欢迎%s登录学生管理系统!\n",userNm);return userNm;case 2:addUser(*&list);writeUserToFile(*&list);userNm = Login(*&list);return userNm;default:printf("ERROR0:选择错误\n");exit(0);break; }}void keydown1(struct Node* list,const char *filename,userList* userList){int choice = -1;fflush(stdin);scanf("%d",&choice);fflush(stdin);                                       /*以防下面switch出错*/struct student temp;                                                    /*结点里边的暂时学生,用于录入学生信息 */ struct Node *tp=NULL;                                                   /*临时结点,用于删除信息时删除结点*/ int temp1=-1;//const char *filename = strcat(userNm,".txt");switch (choice){case 0:printf("正常退出\n");exit(0);break;case 1:printf("------------------【查看全部学生信息】------------------\n");            /*打印信息 */ printList(list);break;case 2:printf("--------------------【录入学生信息】--------------------\n");          /*把学生信息存入新结点,再插入 */ printf("请输入学生学号,姓名,年龄,性别,电话\n");fflush(stdin);while(scanf("%d%s%d%s%s",&temp.po,temp.name,&temp.age,temp.sex,temp.tel)!=5){fflush(stdin);                                                               /*以免影响下一次输入*/printf("您输入的数据不正确,请在下方重新输入正确信息!\n");continue; } fflush(stdin);insertNodebyhead(list,temp); writeintofile(list,filename);                           /*将以上进行数据的改动保存入文件中*/ break;case 3:                                                                          //不能在case下定义变量 printf("--------------------【删除学生信息】--------------------\n");printf("请输入删除的学生姓名\n"); scanf("%s",temp.name);fflush(stdin);tp=searchdatabyname(list,temp.name);if(tp){printf("学号\t姓名\t年龄\t性别\t电话\n");printf("%d\t%s\t%d\t%s\t%s\n",tp->student.po,tp->student.name,tp->student.age,tp->student.sex,tp->student.tel);}else{printf("没有名叫%s的学生\n",temp.name); }deNode(list,temp.name);writeintofile(list,filename) ;                          /*将以上进行数据的改动保存入文件中*/ break;case 4:{printf("--------------------【排序学生信息】--------------------\n");printf("1.输入1按学号从小到大排序\n2.输入2按学号从大到小排序\n");int choice = -1;fflush(stdin);scanf("%d",&choice);switch (choice){case 1:{stolsort(list); printf("------------按学号从小到大排好的学生信息如---------------\n");printList(list); break; }case 2:{stolsort1(list);printf("------------按学号从大到小排好的学生信息如---------------\n");printList(list);break;}default:{printf("输入错误!\n");break;}}   writeintofile(list,filename) ;                         /*将以上进行数据的改动保存入文件中*/ break;  }case 5:{printf("---------------【查询学生信息(按学号)】----------------\n");printf("请输入要查询的学生学号\n");temp1=-1;scanf("%d",&temp1);tp=searchdatabynumber(list,temp1);if(tp){printf("学号\t姓名\t年龄\t性别\t电话\n");printf("%d\t%s\t%d\t%s\t%s\n",tp->student.po,tp->student.name,tp->student.age,tp->student.sex,tp->student.tel);}else{printf("按学号查找不到此学生!\n"); }break;}case 6:{printf("--------------------【更改学生信息】--------------------\n");printf("请输入要更改的学生学号\n");scanf("%d",&temp1);tp=searchdatabynumber(list,temp1);                                //先找到 if(tp){printf("请输入数字确定要更改的数据\n");printf("\n\n 1.更改学生学号\n\n");printf("\n\n 2.更改学生姓名\n\n");printf("\n\n 3.更改学生年龄\n\n");printf("\n\n 4.更改学生性别\n\n");printf("\n\n 5.更改学生电话\n\n");printf("\n\n 请按键选择,回车确定\n");}else {printf("不存在学号为%d的学生\n",temp1);break; }int choice = -1,temp1=-1;fflush(stdin);scanf("%d",&choice);fflush(stdin);int temppo=-1,tempage=-1; char tempname [20],tempsex[5],temptel[13];                  /*没有等于*/switch(choice){case 1:printf("请输入新的学号\n");scanf("%d",&temppo);tp->student.po=temppo;printf("学号修改已完成!"); break;case 2:printf("请输入新的姓名\n");scanf("%s",tempname);strcpy(tp->student.name,tempname);printf("姓名修改已完成!"); break;case 3:printf("请输入新的年龄\n");scanf("%d",&tempage);tp->student.age=tempage;printf("年龄修改已完成!"); break;case 4:printf("请输入新的性别\n");scanf("%s",&tempsex);strcpy(tp->student.sex,tempsex);printf("性别修改已完成!"); break;case 5:printf("请输入新的电话\n");scanf("%s",&temptel);strcpy(tp->student.tel,temptel);printf("电话修改已完成!"); break;default:printf("选择错误\n");system("pause"); break; }writeintofile(list,filename) ;                          /*将以上进行数据的改动保存入文件中*/ break;}case 7:{system("cls");printf("--------------------【管理用户信息】--------------------\n");printf("1.添加用户\n2.修改用户密码\n3.删除用户\n4.查看所有用户\n");fflush(stdin);printf("请选择:\n");int choice = -1;scanf("%d",&choice);fflush(stdin);switch (choice){case 1:{addUser(userList);writeUserToFile(userList); break;}case 2:{alterUser(userList);writeUserToFile(userList);break;}case 3:{deleteUser(userList);writeUserToFile(userList);break;}case 4:{printUser(userList);break;}default:{printf("输入错误!\n");break;}}  }break; default:{printf("选择错误\n");break;}}
}int main(){system("color 7C");const char *userFile = "用户信息.txt";char *filename = "xx.txt";char *userNm = "x";userList List;List.size = 0;readUserFile(&List);showmenu0();userNm = keydown0(&List); system("pause");                                 system("cls");    //printf("1111111,,,,%s",userNm);struct Node*list= createList();filename = strcat(userNm,".txt");readInfor(list,filename);                                /*先把文件中的学生数据全部读入链表结点,以便增删查排改*///printf("333");while(1){    showmenu1();                                            /*展示界面*/ keydown1(list,filename,&List);                                         /*接收输入值*/   system("pause");                                  system("cls");                                 }return 0;
}

三、源码地址

https://github.com/zprjd/Small-student-management-system2.0

学生管理小系统2.0(C语言)相关推荐

  1. Python迷你停车场管理小系统-学习版

    迷你停车场管理小系统 项目说明:有一个3层停车场,每一层共有5个车位,每层车位按照车牌号码尾号停入 预先数据: cars=[['京A8E381','京A8E383','京A8E385','京A8E38 ...

  2. 青年烤饼上饼顺序系统学生时代小作品源码(C语言版)

    /*****************************************************************************/ /* 煎饼上饼系统 姓名:danyuan ...

  3. WebService:跟孔浩学习(契约优先、Schema、WSDL、SOAP、用户管理小系统)

    异构平台之间的交互 XML (DTDàSchema->Stax(XStream).SAX.Dom4J.PULL)    JAXB XStream和Jackson完成Json和java的转化 SO ...

  4. (二)车辆管理小系统

    package myPractice; import java.util.Iterator; import java.util.Scanner; public class Car {public st ...

  5. 使用nodejs开发一个markdown文档管理小系统(一)Using Nodejs to quickly develop a markdown management system...

    好多年没碰过前端jquery了,用一两天时间重温一下,刚好写个小工具, 不递归取文件夹和文件,只写一层,保持足够简单,验证和参数判断暂不写,毕竟只写了几个小时而已,功能算完备了,添加一个简单的管理员权 ...

  6. c语言mysql 学生信息管理系统_学生信息管理系统学生时代小作品源码(C语言版)...

    /*****************************************************************************/ /* 制作一个学籍管理系统:要求包含以下 ...

  7. ASP.NET 学习笔记_13 文章发布管理小系统

    母版页:SiteFont.Master 1 <%@ Master Language="C#" AutoEventWireup="true" CodeBeh ...

  8. C语言期末大作业15个(附源码)成绩管理系统、图书馆管理系统、学生打卡系统、超市信息管理系统、学生考勤系统、职工信息管理系统源码、歌曲信息管理系统、超市收款系统等等

    C语言期末作业15个(上) 1.C语言学生成绩管理系统 2.C语言图书馆管理系统(复杂版) 3.C语言图书馆管理系统(简洁版) 4.C语言停车管理系统(两个版本) 5.C语言学生考勤系统 6.C语言班 ...

  9. C语言期末作业(15个)-货物管理系统、歌曲信息管理系统、职工信息管理系统源码、学生打卡系统、小学生计算机辅助教学系统、门禁系统、银行管理系统等等

    C语言期末作业15个(下) 9.C语言货物管理系统 10.C语言歌曲信息管理系统 11.C语言职工信息管理系统源码 12.C语言学生打卡系统 13.C语言小学生计算机辅助教学系统 14.C语言门禁系统 ...

最新文章

  1. 【洛谷 1991】 无线通讯网
  2. PHP下的浮点运算不准的解决办法
  3. 程序员职场第二次课笔记 9.9号
  4. 真正的创业是什么感觉?
  5. PowerDesigner工具箱palette关了如何重新打开
  6. PyCharm主题自定义
  7. 软件安全之Hook 技术 Inline Hook技术应用 TraceMe.exe
  8. 开源共轴双桨无人机 Tdrone 软硬件全部在 GitHub 开源
  9. 连续被特斯拉碾压的国产车终于成功反击,五菱宏光月销超2万
  10. promise,回调地狱
  11. linux su无效_linux系统 su切换用户失败情况
  12. 回文数--java两种方法实现
  13. 强化练习题(二)易错题
  14. 票房和口碑称霸国庆档,用 Python 分析电影《我和我的家乡》到底有多牛
  15. python实现解数独
  16. Redis主从、哨兵、 Cluster集群一锅端!
  17. 复杂事情简单化,其实99%的人都不会
  18. mac 自带 java 环境_在mac上搭建了Java 环境,谨以此文写给自己
  19. 北京市顺义区谷歌卫星地图下载
  20. 日语补全——格助词助词

热门文章

  1. 远程桌面无法复制粘贴到本地
  2. 对象式单片机外部模块驱动编写详解——DAC8552为例
  3. linux系统上安装ntp服务,linux时间同步ntp服务的安装与配置
  4. C语言CRC-16 IBM格式校验函数
  5. 如何重新排列数组使得数组左边为奇数,右边为偶数
  6. Django REST 框架详解 03 | 模型建立与表设计
  7. Halcon联合C#实现相机实时显示采集图像
  8. 【uni-app】base64转图片
  9. 机器学习之KNN算法,朴素贝叶斯,决策树,SVM算法比较
  10. spyder如何使用deug