用C语言完成以下功能:数据的录入、显示,链表的创建,插入数据,删除数据。每个功能用一个函数来实现。

1)定义家庭住址结构体adress,包含成员有:省份、城市、街道;定义成绩结构体score,包含成员有:“C程序设计”、“Java程序设计”、“Basic成绩设计”的成绩;再定义学生结构体student,包含的成员有:学号、姓名、性别、成绩、家庭住址、下一个结点指针,其中成绩类型定义为score类型的结构体,家庭住址的类型定义为adress结构体。下一个结点指针的类型定义为学生结构体。 2)定义头结点的结构体head,其成员为指向学生结构体的指针。 3)插入数据时学号要按照升序排列。

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 这会儿学校该放假了。难道上大学还有暑假作业?
6 个月之前 回复

1个回答

然而还没放假,请问有方法吗

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 建议自己完成,不但能学习知识,关键是可以省钱,找人做花个好几百的多浪费,除非你是蠢笨的富二代。
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请问 c语言当程序退出后再重新运行可以显示先前录入的信息怎么做
/*编写一个程序,实现循环录入如下记录信息 学校 字符串 姓名 字符串 提示:利用结构体数组或链表保存录入的数据 要求: 1.当程序退出后再重新运行可以显示先前录入的信息*/
小白请教C语言链表排序的问题?
能不能帮看一下我的排序函数哪里有问题,谢谢! ![图片说明](https://img-ask.csdn.net/upload/2016![图片说明](https://img-ask.csdn.net/upload/201608/27/1472270981_203754.png)08/27/1472270972_5742.png) #include<stdio.h>/*引用库函数*/ #include<string.h> #include<stdlib.h> #include<malloc.h> struct Lib/*定义图书信息的结构体变量*/ { char name[10];/*图书名*/ char writter[10];/*作者名*/ char number[10];/*分类号*/ char pub[10];/*出版社*/ char time[10];/*出版时间*/ char price[10];/*价格*/ struct Lib* next; }; #define LEN sizeof(struct Lib) struct Lib* head = NULL;/*头指针为空*/ /*函数声明*/ void input();/*图书信息录入函数*/ void output();/*图书信息浏览函数*/ void out();/*退出系统函数*/ void menu();/*菜单函数*/ int login();/*登录函数*/ void save();/*图书信息保存函数*/ void search();/*图书信息查询函数*/ void del();/*图书信息删除函数*/ void sort();/*图书信息排序函数*/ void modify();/*图书信息修改函数*/ void modify_output();/*图书信息修改后输出函数*/ int main()/*主函数*/ { printf("请输入密码:"); login(); printf("***********菜单***********\n"); menu(); return 0; } int login() { char password[10]; char password1[10] = "admin"; scanf("%s", password); if (strcmp(password, password1) == 0)/*检查密码是否正确*/ printf("密码正确!\n"); else { printf("密码错误!请重试!\n"); login(); } return 1; } void menu() { int n; printf(" ┏━━━━━━━━┓\n"); printf(" ┃1:图书信息录入 ┃\n"); printf(" ┃2:图书信息浏览 ┃\n"); printf(" ┃3:图书信息查询 ┃\n"); printf(" ┃4:图书信息排序 ┃\n"); printf(" ┃5:图书信息删除 ┃\n"); printf(" ┃6:图书信息修改 ┃\n"); printf(" ┃7:退出系统 ┃\n"); printf(" ┗━━━━━━━━┛\n"); printf("请输入选项前对应数字:"); scanf("%d", &n); if (n == 1) { input(); save(); menu(); } else if (n == 2) { output(); menu(); } else if(n==3) search(); else if(n==4) sort(); else if(n==5) del(); else if (n == 6) modify(); else if(n==7) out(); else { printf("输入错误!请重新输入!\n"); menu(); } } void input() { Lib *end; Lib *p1; int isempty = 0;/*标记变量初值*/ if (!head)/*检查head是否为空*/ { end = head = (Lib*)malloc(sizeof(Lib));/*申请新的内存空间*/ isempty = 1;/*改变变量初值*/ head->next = NULL; } else { end = head; while (end->next)/*使end->next为空*/ end = end->next; } char answer[5] = "yes", answer1[5]; if (isempty)/*检查是否已开辟内存空间*/ p1 = head; else p1 = (Lib*)malloc(sizeof(Lib)); printf("书名:"); scanf("%s", p1->name); printf("作者名:"); scanf("%s", p1->writter); printf("分类号:"); scanf("%s", p1->number); printf("出版单位:"); scanf("%s", p1->pub); printf("出版时间:"); scanf("%s", p1->time); printf("价格:"); scanf("%s", p1->price); if (!isempty)/*检查变量初值是否已被改变*/ { end->next = p1; end = p1; end->next = NULL; } printf("是否继续录入?Yes or not\n"); scanf("%s", answer1); while (strcmp(answer1, answer) == 0)/*连续录入图书信息*/ { p1 = (Lib*)malloc(LEN);/*申请新的内存空间*/ printf("书名:"); scanf("%s", p1->name); printf("作者名:"); scanf("%s", p1->writter); printf("分类号:"); scanf("%s", p1->number); printf("出版单位:"); scanf("%s", p1->pub); printf("出版时间:"); scanf("%s", p1->time); printf("价格:"); scanf("%s", p1->price); end->next = p1; end = p1; end->next = NULL; printf("是否继续录入?Yes or not\n"); scanf("%s", answer1); } } void save() { Lib *p = head; FILE *w = fopen("output.txt", "w");/*打开output.txt文件*/ if (!w) { printf("打开文件失败!"); return; } int n = 1; while (p)/*将图书信息保存到output.txt文件中*/ { fprintf(w, "%d: %s %s %s %s %s %s \n", n++, p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } fclose(w); } void output() { Lib *p = head; int n = 1; printf("图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); while (p)/*输出图书信息*/ { printf("%d. %8s %8s %8s %8s %15s %15s \n", n++, p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } } void search() { Lib *p; int n; char book[10],wri[10]; p=head; printf(" ┏━━━━━━━━━━┓\n"); printf(" ┃1:按图书名查询 ┃\n"); printf(" ┃2:按作者名查询 ┃\n"); printf(" ┗━━━━━━━━━━┛\n"); scanf("%d",&n); if(n==1) { printf("请输入图书名:"); scanf("%s",book); while(strcmp(book, p->name)!=0)/*查找相应图书*/ p=p->next; if(p) { printf("图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); printf("%8s %8s %8s %8s %15s %15s \n", p->name, p->writter, p->number, p->pub, p->time, p->price); menu(); } else { printf("没有要查询的图书!\n"); menu(); } } else if(n==2) { printf("请输入作者名:"); scanf("%s",wri); while(strcmp(wri, p->writter)!=0)/*查找相应图书*/ p=p->next; if(p) { printf("图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); printf("%8s %8s %8s %8s %15s %15s \n", p->name, p->writter, p->number, p->pub, p->time, p->price); menu(); } else { printf("没有要查询的图书!\n"); menu(); } } else { printf("输入错误!\n"); menu(); } } void sort() { Lib *p,*pfirst,*ptail,*pmin,*pminBefore; p=head; int n; printf(" ┏━━━━━━━━━━┓\n"); printf(" ┃1:按价格从低到高排序┃\n"); printf(" ┃2:按价格从高到低排序┃\n"); printf(" ┗━━━━━━━━━━┛\n"); printf("请选择排序标准(输入选项前数字):"); scanf("%d",&n); if(n==1) { pfirst = NULL; while (head != NULL) /*在链表中找键值最小的节点。*/ { for (p = head, pmin = head; p->next != NULL; p = p->next) /*循环遍历链表中的节点,找出此时最小的节点。*/ { if (p->next->price < pmin->price) /*找到一个比当前min小的节点。*/ { pminBefore = p; /*保存找到节点的前驱节点*/ pmin = p->next; /*保存键值更小的节点。*/ } } if (pfirst == NULL) /* 如果有序链表目前还是一个空链表 */ { pfirst = pmin; ptail = pmin; } else /* 如果有序链表中已经有节点*/ { ptail->next = pmin; /* 把刚找到的最小节点放到最后*/ ptail = pmin; } if (pmin == head) /* 如果找到的最小节点就是第一个节点*/ { head = head->next; } else /*如果不是第一个节点*/ { pminBefore->next = pmin->next; /*让pmin离开原链表。*/ } } if (pfirst != NULL) /*循环结束得到有序链表first */ { ptail->next = NULL; } int n=1; printf("价格从低到高信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); while (pfirst)/*输出图书信息*/ { printf("%d. %8s %8s %8s %8s %15s %15s \n", n++, pfirst->name, pfirst->writter, pfirst->number, pfirst->pub, pfirst->time, pfirst->price); pfirst = pfirst->next; } menu(); } else { printf("输入错误!\n"); menu(); } } void del() { Lib *p,*p1; p=head; char book[10]; printf("请输入要删除的图书名:"); scanf("%s",book); while(strcmp(book, p->name)!=0)/*查找相应图书*/ { p1=p; p=p->next; } if(p) { p1->next=p->next; p=head; printf("删除成功!\n现在图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); int n=1; while (p) { printf("%d. %8s %8s %8s %8s %15s %15s \n", n++, p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } menu(); } else { printf("库中没有此图书!\n"); menu(); } } void modify() { Lib *p,*p1; int n; p=head; char a[10]; printf(" ┏━━━━━┓\n"); printf(" ┃1:图书名 ┃\n"); printf(" ┃2:作者名 ┃\n"); printf(" ┃3:分类号 ┃\n"); printf(" ┃4:出版单位┃\n"); printf(" ┃5:出版时间┃\n"); printf(" ┃6:价格 ┃\n"); printf(" ┗━━━━━┛\n"); printf("请选择要修改的信息(输入选项前的数字):\n"); scanf("%d",&n); if(n==1) { printf("原来的图书名是:"); scanf("%s",a); while(strcmp(a, p->name)!=0)/*查找相应图书*/ { p1=p; p=p->next; } if(p) { printf("现在的图书名是:"); scanf("%s",p->name); modify_output();/*输出修改后的图书信息*/ } else { printf("库中没有此图书!\n"); menu(); } } else if(n==2) { printf("原来的作者名是:"); scanf("%s",a); while(strcmp(a, p->writter)!=0) { p1=p; p=p->next; } if(p) { printf("现在的作者名是:"); scanf("%s",p->writter); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==3) { printf("原来的分类号是:"); scanf("%s",a); while(strcmp(a, p->number)!=0) { p1=p; p=p->next; } if(p) { printf("现在的分类号是:"); scanf("%s",p->number); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==4) { printf("原来的出版单位是:"); scanf("%s",a); while(strcmp(a, p->pub)!=0) { p1=p; p=p->next; } if(p) { printf("现在的出版单位是:"); scanf("%s",p->pub); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==5) { printf("原来的出版时间是:"); scanf("%s",a); while(strcmp(a, p->time)!=0) { p1=p; p=p->next; } if(p) { printf("现在的出版时间是:"); scanf("%s",p->time); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==6) { printf("原来的价格是:"); scanf("%s",a); while(strcmp(a, p->price)!=0) { p1=p; p=p->next; } if(p) { printf("现在的价格是:"); scanf("%s",p->price); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } } void modify_output() { Lib *p; p=head; int c=1; printf("修改成功!\n现在图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); while (p)/*输出修改后的图书信息*/ { printf("%d. %8s %8s %8s %8s %15s %15s \n",c++,p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } menu(); } void out() { printf("退出成功!\n"); }
c语言编写诊疗管理信息系统
其中: 1)诊疗信息主要包括:序号(6位的标识符),诊疗时间,挂号科室,主治医生姓名,患者姓名,患者年龄,本次诊疗开销。 2)序号为一个流水号,唯一表示一次诊疗信息,其中:第1位为小写英文字符,表示挂号科室;第2-3位为数字,表示主治医生。 3)诊疗时间为日期,包括年、月、日信息。 4)挂号科室仅限:神经科、精神科等自行设置的5类科室。 5)主治医生和患者姓名均为字符数组类型,长度不超过20位。 6)本次诊疗开销,自行设计结构体能够精确表示元、角、分,且约定单次开销不超过10000.00元。 具体功能要求如下: 1)能够从文件中录入多次诊疗信息(全部信息或部分信息),也能够随时录入1次诊疗信息(全部信息或部分信息)。注意:需要考虑各种类型的不规范、不合理或错误数据,如:编号位数不对,编号不唯一,日期格式不对。 2)能够随时修改1次诊疗信息,包括:对已录入的信息进行修改或删除、对未录入的信息进行添加。 3)能够随时删除1次诊疗信息的全部内容。 4)能够计算某位医生的目前诊疗累计营业额(按照编号或主治医生姓名检索)。 5)能够按照编号顺序打印某挂号科室的所有诊疗信息,及其总营业额。 6)能够计算某位患者(按照患者姓名检索)的目前诊疗开销。 7)能够按照编号顺序打印系统中所有诊疗信息。 8)能够将当前系统中的所有信息保存到文件中。 9)能够打印所有诊疗费用超过1000.00的诊疗清单,要求用链表实现。 10)能够打印某段时间范围内(按照开始时间和结束时间检索)的所有诊疗信息;如果只设定开始时间,则为至今的诊疗信息;如果只设定结束时间,则为结束时间之前的所有诊疗信息。要求用链表实现。 11)其它你认为有用的附加功能,可酌情添加。 特殊说明:主治医生之间、患者之间、主治医生与患者之间可能重名
c语言 图书管理程序设计,当对图书信息进行修改时,如若未找到则程序出错
#include <stdio.h> #include <stdlib.h> #include <string.h> //定义一本书 struct book { char name[10]; char writer[10]; char publisher[21]; char price[5]; }; struct Node { //int data; struct book data; struct Node* next; }; //创建表 struct Node* createList() { //结构体变量表示表头 //指针--->变量 动态内存申请 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); headNode->next = NULL; return headNode; } //创建结点 struct Node* createNode(struct book data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //插入结点 void insertNodeByHead(struct Node* headNode, struct book data) { struct Node* newNode = createNode(data); //表头法 newNode->next = headNode->next; headNode->next = newNode; } //指定位置删除 void deleteAppoinNode(struct Node* headNode, char* name) { //struct book struct Node* posNode = headNode->next; struct Node* posFrontNode = headNode; if (posNode == NULL) { printf("数据为空,无法删除!\n"); return; } //书名是字符串,字符串:strcmp while (strcmp(posNode->data.name,name)) { posFrontNode = posNode; posNode = posFrontNode->next; if (posNode == NULL) { printf("未找到指定位置无法删除!\n"); return; } } //找到了 posFrontNode->next = posNode->next; free(posNode); } //查找功能 struct Node* searchInfoByData(struct Node* headNode, char *name) { struct Node* pMove = headNode->next; if (pMove == NULL) return NULL; while (strcmp(pMove->data.name, name)) { pMove = pMove->next; } return pMove; } //打印 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; //设计到数据的处理 printf("书名\t作者\t出版社\t价格\n"); while (pMove) { printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); pMove = pMove->next; } printf("\n"); } void menu() { //所有操作都同步到文件 printf("-------------【图书信息管理系统】-----------\n"); printf("\t\t1.录入图书信息\n"); printf("\t\t2.浏览图书信息\n"); printf("\t\t3.修改图书信息\n"); printf("\t\t4.删除图书信息\n"); printf("\t\t5.查找图书信息\n"); printf("\t\t0.退出系统\n"); printf("-------------------------------------------\n"); } struct Node* list = createList(); //接收指令 void keyDown() { int choice = 0; struct book data; struct Node* pMove = NULL; scanf("%d", &choice); switch (choice) { case 0: printf("正常退出!\n"); system("pause"); exit(0); break; case 1: printf("--------------【录入图书信息】-----------\n"); //插入链表 printf("请输入书名,作者,出版社,价格:\n"); fflush(stdin); //清空缓冲区 scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); insertNodeByHead(list, data); break; case 2: printf("--------------【浏览图书信息】-----------\n"); printList(list); //打印链表 break; case 3: printf("--------------【修改图书信息】-----------\n"); printf("请输入要修改的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法修改!\n"); system("pause"); } else { printf("请输入图书名,作者,出版社,价格:"); scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); strcpy(pMove->data.name, data.name); strcpy(pMove->data.writer, data.writer); strcpy(pMove->data.publisher, data.publisher); strcpy(pMove->data.price, data.price); } break; case 4: printf("--------------【删除图书信息】-----------\n"); printf("请输入删除的书名:"); scanf("%s", data.name); deleteAppoinNode(list, data.name); break; case 5: printf("--------------【查找图书信息】-----------\n"); printf("请输入要查找的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法删除!\n"); system("pause"); } else { printf("书名\t作者\t出版社\t价格\n"); printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); } break; default: printf("选择错误,重新输入\n"); system("pause"); break; } } int main() { while (1) { menu(); keyDown(); system("pause"); system("cls"); } system("pause"); return 0; }
c语言图书管理系统设计,卡在查找时如果是找不到则程序出错,大神能帮我解决一下吗?
输入是成功,但是如果查找的不是已输入,则程序出错。 #include <stdio.h> #include <stdlib.h> #include <string.h> //定义一本书 struct book { char name[10]; char writer[10]; char publisher[21]; char price[5]; }; struct Node { //int data; struct book data; struct Node* next; }; //创建表 struct Node* createList() { //结构体变量表示表头 //指针--->变量 动态内存申请 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); headNode->next = NULL; return headNode; } //创建结点 struct Node* createNode(struct book data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //插入结点 void insertNodeByHead(struct Node* headNode, struct book data) { struct Node* newNode = createNode(data); //表头法 newNode->next = headNode->next; headNode->next = newNode; } //指定位置删除 void deleteAppoinNode(struct Node* headNode, char* name) { //struct book struct Node* posNode = headNode->next; struct Node* posFrontNode = headNode; if (posNode == NULL) { printf("数据为空,无法删除!\n"); return; } //书名是字符串,字符串:strcmp while (strcmp(posNode->data.name,name)) { posFrontNode = posNode; posNode = posFrontNode->next; if (posNode == NULL) { printf("未找到指定位置无法删除!\n"); return; } } //找到了 posFrontNode->next = posNode->next; free(posNode); } //查找功能 struct Node* searchInfoByData(struct Node* headNode, char *name) { struct Node* pMove = headNode->next; if (pMove == NULL) return NULL; while (strcmp(pMove->data.name, name)) { pMove = pMove->next; } return pMove; } //打印 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; //设计到数据的处理 printf("书名\t作者\t出版社\t价格\n"); while (pMove) { printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); pMove = pMove->next; } printf("\n"); } void menu() { //所有操作都同步到文件 printf("-------------【图书信息管理系统】-----------\n"); printf("\t\t1.录入图书信息\n"); printf("\t\t2.浏览图书信息\n"); printf("\t\t3.修改图书信息\n"); printf("\t\t4.删除图书信息\n"); printf("\t\t5.查找图书信息\n"); printf("\t\t0.退出系统\n"); printf("-------------------------------------------\n"); } struct Node* list = createList(); //接收指令 void keyDown() { int choice = 0; struct book data; struct Node* pMove = NULL; scanf("%d", &choice); switch (choice) { case 0: printf("正常退出!\n"); system("pause"); exit(0); break; case 1: printf("--------------【录入图书信息】-----------\n"); //插入链表 printf("请输入书名,作者,出版社,价格:\n"); fflush(stdin); //清空缓冲区 scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); insertNodeByHead(list, data); break; case 2: printf("--------------【浏览图书信息】-----------\n"); printList(list); //打印链表 break; case 3: printf("--------------【修改图书信息】-----------\n"); printf("请输入要修改的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法修改!\n"); system("pause"); } else { printf("请输入图书名,作者,出版社,价格:"); scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); strcpy(pMove->data.name, data.name); strcpy(pMove->data.writer, data.writer); strcpy(pMove->data.publisher, data.publisher); strcpy(pMove->data.price, data.price); } break; case 4: printf("--------------【删除图书信息】-----------\n"); printf("请输入删除的书名:"); scanf("%s", data.name); deleteAppoinNode(list, data.name); break; case 5: printf("--------------【查找图书信息】-----------\n"); printf("请输入要查找的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法删除!\n"); system("pause"); } else { printf("书名\t作者\t出版社\t价格\n"); printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); } break; default: printf("选择错误,重新输入\n"); system("pause"); break; } } int main() { while (1) { menu(); keyDown(); system("pause"); system("cls"); } system("pause"); return 0; }
c语言 打印不出来?文件用得对吗
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #define max 100 //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! <货物类型> typedef struct Node{ char NAME[100];//各类型名称 int NUM; //各类型下的货物总数 struct Node*next; }Node; // 定义单个货物 typedef struct Goods{ char name[100];//货物名称 double price;//货物价格 int num;//货物库存 int id;//所属类型的id }Goods; //函数声明 void Create_File_List(); //创建文件 void add_kinds();//将种类信息录入文件中 Node*CreateList();//创建链表(将信息放到链表中) void Print_List(Node*head);//打印链表 //主函数 void main() { int x; Node *head; if(!(head=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } Create_File_List();//创建文件 printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:Print_List(head);break; case 2:add_kinds(); CreateList(); break; case 3:printf("******请输入要删除货物类型的编号:******\n"); break; case 4:;break; case 5:;break; case 6:;break; case 7:printf("bye!see you next time!\n"); exit(0); break; default:printf("input error!\nplaese input1-7"); } } } //函数 //创建文件是否成功 void Create_File_List() { FILE *fp;//需要在每个函数写这句吗 if ((fp = fopen("storehouse.txt","r"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("student.txt","w"))==NULL) { printf( "无法建立文件!"); } } } //录入货物信息到文件中 void add_kinds() { FILE*fp; struct Node Node; fp = fopen("storehouse.txt","a+"); Create_File_List(); printf("请输入货物名称:"); scanf("%s",&Node.NAME); printf("请输入货物总数:"); scanf("%d",&Node.NUM); fwrite(&Node,sizeof(Node),1,fp);//这两个fwrite有区别吗 fclose(fp); } //从已经写入的文件中读到链表中(函数功能:创建链表) Node*CreateList() { Node*p,*head,*q;//p指针总是指向新申请的节点,q总是指向尾节点 p=(Node*)malloc(sizeof(Node)); head=p;//开辟头/尾节点内存 (头结点没有信息) q=p; q->next=NULL;//标志链表的结束 FILE*fp; fp=fopen("storehouse.txt","r"); struct Node Node; while(fread(&Node,sizeof(Node),1,fp)!=0)//从文件中读结构块体 { //p=(Node*)malloc(sizeof(Node)); strcpy(p->NAME,Node.NAME); p->NUM=Node.NUM; //下面两句没看懂 q->next=p;//把新节点挂到尾节点后 q=q->next;//q指针指向新的尾节点 //第二句不就是q=p吗? } q->next=NULL;//标志链表的结束 fclose(fp); return head; } //从链表中输出打印到屏幕中数据(输出链表) void Print_List(Node*head) { Node*p; p=head->next;//跳过无数据的头结点 while(p!=NULL) { printf("%s",p->NAME); printf("%d",p->NUM); p=p->next;//指向下一个节点 } } ![图片说明](https://img-ask.csdn.net/upload/201806/01/1527846937_495816.png)
输大神看一下我写的宿舍管理系统到底出啥问题了!急,马上要交了!!!
原本只要一个结构体的,但我弄复杂了,求大神帮下忙!这个程序主要是输入时总会得不到正确的链表,我试了好久也没成功,都快崩溃了!简单地用DOS系统运行和其他编程软件运行结果都不同! 学生宿舍管理系统设计 功能:实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系统以文本菜单形式工作。 基本要求: 实现宿舍基本信息的录入、修改、删除。 实现宿舍信息的浏览、查询 实现安排学生入住、退出、调整宿舍等功能 实现学生宿舍安排信息的统计功能 (要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学) 问题补充:http://pan.baidu.com/share/link?shareid=3686311597&uk=3728380894 源代码太长了,请下载这个文件看 问题详情:我输入一栋楼里的几个数据进入后或几个楼号,用Microsoft Visual C++ 6.0调试当输入第三个数据时,在插入那里有些head或ptr的内存地址出现红色,输出时也不能完全输出。我改了部分后在手机的C4软件运行了下,输入多个楼号(每栋楼只有一个房间),输出没任何问题,但只输入一栋楼的多个房间时,比如7个数据,点浏览数据(全部输出时),只有4个数据,再点浏览却又只输出了1个,如果一开始点了查询时竟然一个数据都不剩了。这些结果是手机上运行的结果,我会在电脑上再试试,如果有更改和更新希望和大家指点一下。(一开始发的源代码错了,有好多问题当时没改过来,现在改了)。我的问题假设:1、创建插入数据时没问题,但浏览和查询把head->room的指向改变了,使某些数据丢失了。2、创建的插入时,由于分链表(房间链表)的最后一个没有赋NULL,刚开始有做时主链表(楼号链表)出现过这个问题。希望大家帮下忙,其他同学都做完了,但由于我弄复杂了写了双结构体而写了好久,关键是马上要交了。求大家帮帮忙,谢谢了!
文件读写失败,求问哪里出了错?
(学生成绩管理系统链表版)应该是文件读写的问题,第一次录入信息可以写入文件,但再次运行时无法读取之前写入的文件, 且会弹出“Debug error”的框,求问哪里出错了,谢谢 ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242676_963443.png) 点击忽略以后不影响程序运行 ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242700_492778.png) 可以输入信息,且写入了文件 ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242713_264771.png) 但关闭文件后,再次运行程序,显示如下 ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242899_516963.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242722_393073.png) 无法读取之前写入的信息,程序也无法 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //创建学生信息结构体 struct student { char ID[20]; //学号 char name[20]; //姓名 int math; //高数成绩 int english; //英语成绩 int eletric; //电路成绩 int c_program; //C语言成绩 float sum; //总分 float aver; //平均分 }; //链式管理系统 struct Node { struct student data; struct Node* next; }; //创建表头,表示整个链表 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* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //插入操作 void insertNode(struct Node* head, struct student data) { //创建插入结点 struct Node* newNode = CreateNode(data); newNode->next = head->next; head->next = newNode; } //删除操作 void deleteNode(struct Node* head, char *pID) { struct Node* cur, * prev; for (cur = head, prev = NULL;cur != NULL && strcmp(cur->data.ID, pID) != 0;prev = cur, cur = cur->next); if (cur == NULL) { printf("未找到相关数据\n"); system("pause"); return; } if (prev == NULL) head = head->next; else prev->next = cur->next; free(cur); return; } //打印操作 void printList(struct Node* head) { //从第二个结点开始打印 struct Node* p = head->next; printf("学号\t姓名\t高数\t英语\t电路\tC语言\t总分\t平均分\n"); while (p) { printf("%s\t%s\t%d\t%d\t%d\t%d\t%3.0f\t%.2f\n",p->data.ID, p->data.name, p->data.math, p->data.english, p->data.eletric, p->data.c_program, p->data.sum, p->data.aver); p = p->next; } printf("\n"); } //按照平均分进行排序(冒泡排序法) void sort(struct Node* head) { struct Node* p, * pstart, * pend, * temp, * pre; p = head->next; pend = head; pstart = (struct Node*)malloc(sizeof(struct Node)); pstart->next = head; while (p != NULL) { temp = pstart->next, pre = pstart; while (temp != p && p->data.aver >= temp->data.aver) { temp = temp->next; pre = pre->next; } if (temp == p) pend = p; else { pend->next = p->next; p->next = temp; pre->next = p; } p = pend->next; } head = pstart->next; free(pstart); return; } //链表的文件操作 //链表的读文件操作 void readInfo(struct Node* head, char* fileName) { FILE* read = fopen(fileName, "r"); if (read == NULL) read = fopen(fileName, "w+"); struct student data; while (fscanf(read, "%s\t%s\t%d\t%d\t%d\t%d\t%3.0f\t%.2f\n", data.ID, data.name, data.math, data.english, data.eletric, data.c_program, data.sum, data.aver) != EOF) insertNode(head, data); fclose(read); } //链表的写文件操作 void writeInfo(struct Node* head, char *fileName) { FILE* write = fopen(fileName, "w"); struct Node* p = head->next; while (p) { fprintf(write, "%s\t%s\t%d\t%d\t%d\t%d\t%3.0f\t%.2f\n", p->data.ID, p->data.name, p->data.math, p->data.english, p->data.eletric, p->data.c_program, p->data.sum, p->data.aver); p = p->next; } fclose(write); } //菜单项目 void menu() { printf("--------------学生成绩管理系统------------------\n"); printf("\t\t0.退出系统\n"); printf("\t\t1.录入信息\n"); printf("\t\t2.浏览信息\n"); printf("\t\t3.删除信息\n"); printf("\t\t4.修改信息\n"); printf("\t\t5.成绩排序\n"); printf("------------------------------------------------\n"); } struct Node* studentList = CreateList(); //按键交互 void keydown() { int userkey = 0; printf("请输入指令的相应序号:\n"); scanf("%d", &userkey); struct student userData; switch (userkey) { case 0: printf("--------------【退出系统】---------------\n"); printf("正常退出\n"); system("pause"); exit(0); break; case 1: printf("--------------【录入信息】---------------\n"); printf("请输入以下学生信息:\n"); printf("学号\t姓名\t高数\t英语\t电路\tC语言\n"); scanf("%s%s%d%d%d%d", userData.ID, userData.name, &userData.math, &userData.english, &userData.eletric, &userData.c_program); userData.sum = userData.math + userData.eletric + userData.c_program + userData.english; userData.aver = (userData.sum) / 4; insertNode(studentList, userData); break; case 2: printf("--------------【浏览信息】---------------\n"); printList(studentList); break; case 3: printf("--------------【删除信息】---------------\n"); printf("请输入需要删除的学生学号:\n"); scanf("%s", userData.ID); deleteNode(studentList, userData.ID); break; case 4: printf("--------------【修改信息】---------------\n"); printf("请输入需要修改的学生学号:\n"); scanf("%s", userData.ID); deleteNode(studentList, userData.ID); printf("请重新输入以下学生信息:\n"); printf("学号\t姓名\t高数\t英语\t电路\tC语言\n"); scanf("%s%s%d%d%d%d", userData.ID, userData.name, &userData.math, &userData.english, &userData.eletric, &userData.c_program); userData.sum = userData.math + userData.eletric + userData.c_program + userData.english; userData.aver = (userData.sum) / 4; insertNode(studentList, userData); printf("修改成功!\n"); break; case 5: printf("--------------【成绩排序】---------------\n"); sort(studentList); printList(studentList); break; default:printf("输入错误,请重新输入\n"); break; } } int main() { readInfo(studentList, "studentInfo.txt"); while (1) { menu(); keydown(); writeInfo(studentList, "studentInfo.txt"); system("pause"); system("cls"); } system("pause"); return 0; } ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242676_963443.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242700_492778.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242713_264771.png) ![图片说明](https://img-ask.csdn.net/upload/202001/06/1578242722_393073.png)
小白求助:c语言链表头结点无法删除,请各位老师指教,不胜感激.
![图片说明](https://img-ask.csdn.net/upload/201601/24/1453639865_885309.png) 这是运行后的结果 下面是代码,请各位前辈指教,谢谢! ``` #include "stdio.h" #include "string.h" #include "stdlib.h" #define len sizeof(struct student) typedef struct student { char id[10]; char name[20]; struct student *next; }STU; //分割线的输出 void line() { int i; for(i=0;i<30;i++) { printf("-"); } printf("\n"); } //新建链表 STU *link(int n) { STU *head,*p,*p1; int i=1; while(n<=0) { printf("分配失败,请输入你要录入学生的个数:"); scanf("%d",&n); line(); } head=p=p1=(struct student *)malloc(len); printf("请输入第1个学生信息(学号,姓名):\n"); scanf("%s%s",p1->id,p1->name); for(i=2;i<=n;i++) { p1=(struct student *)malloc(len); line(); printf("请输入%d个学生信息(学号,姓名):\n",i); scanf("%s%s",p1->id,p1->name); p->next=p1; p=p1; } p1->next=NULL; return head;//返回头指针 } //链表的输出 void output(STU *head) { STU *p=head; line(); if(p!=NULL) printf("学号\t姓名\n"); while(p!=NULL) { printf("%s\t%s\n",p->id,p->name); p=p->next; } } //链表查找 void find(STU *head,char *name) { STU *p=head; while(p!=NULL) { if (strcmp(p->name,name)==0) { break; } p=p->next; } if(p==NULL) { line(); printf("对不起,找不到此学生\n"); } else { line(); printf("学号\t姓名\n"); printf("%s\t%s\n",p->id,p->name); } } //链表的删除 STU *del(STU *head,char *name) { STU *p=head,*front; if (strcmp(head->name,name)==0) { head=head->next; return head; } while(p!=NULL) { if (strcmp(p->name,name)==0) { break; } front=p; p=p->next; } if (p!=NULL) { front->next=p->next; } else { printf("找不到该学生;"); } return head; } void main() { STU *head; int n; char name[20]; head=NULL; printf("请输入你要录入学生的个数:"); scanf("%d",&n); line(); head=link(n); output(head); /* printf("请输入要查找的学生姓名:\n"); getchar(); gets(name); output(find(head,name));*/ line(); printf("请输入你要删的学生的姓名:\n"); getchar(); gets(name); del(head,name); output(head); } ```
大一c语言企业员工管理系统(救救孩子吧)
1.网上嫖了一个,但是看不懂(上课摸鱼的那种),想加一个排序,但是加不进去 2.就是吧录入进去的按年龄排序就行了 就差个排序了55 ![图片说明](https://img-ask.csdn.net/upload/201906/12/1560316452_319005.png) ![图片说明](https://img-ask.csdn.net/upload/201906/12/1560316492_838955.png) 3.先谢谢大佬们55 如下 #include <stdio.h> #include <iostream> #include "windows.h" using namespace std; #include <stdlib.h> #include <string.h> #define N 100 typedef struct phone { char num[30]; char name[50]; char sex[10]; char year[50]; char school[50]; char zhiwei[50]; char money[10]; char address[30]; char tel[30]; struct phone *next; }phone,p[100]; phone *head; void Initiate(); void Menu(); phone *Create();//创建 void Find(); void Alter(); void Delete(); void List(); phone *write_in(); phone *write_out(); void count(); void tongji(); void paixu(); phone *write_in(phone *head) { FILE *fp; phone *p; if((fp=fopen("D:职工信息.txt","w"))==NULL) { printf("无法打开文件!!!\n"); exit(0); } p=head->next; if(head!=NULL) while(p!=NULL) { fprintf(fp,"%s %s %s %s %s %s %s %s %s",p->num,p->name,p->sex,p->year,p->school,p->zhiwei,p->money,p->address,p->tel); fprintf(fp,"\r\n"); p=p->next; } fclose(fp); return head; } phone *write_out() { FILE *fp; phone *p,*pre,*tail; head=(phone *)malloc(sizeof(phone)); strcpy(head->num,"\0"); strcpy(head->name,"\0"); strcpy(head->sex,"\0"); strcpy(head->year,"\0"); strcpy(head->school,"\0"); strcpy(head->zhiwei,"\0"); strcpy(head->money,"\0"); strcpy(head->address,"\0"); strcpy(head->tel,"\0"); tail = pre=head; fp=fopen("D:职工信息.txt","r"); if(fp==NULL) { printf("文件打开失败!!!"); exit(0); } p=(phone *)malloc(sizeof(phone)); p->next=NULL; head->next=NULL; while(fscanf(fp,"%s %s %s %s %s %s %s %s %s",p->num,p->name,p->sex,p->year,p->school,p->zhiwei,p->money,p->address,p->tel)!=EOF) { pre = tail; tail->next=p; tail=p; p=(phone *)malloc(sizeof(phone)); p->next=NULL; } fclose(fp); return head; } //初始化 void Initiate() { if((head=(phone *)malloc(sizeof(phone)))==NULL) exit(1); head->next=NULL; } //主体菜单 void Menu() { printf("*********************************************欢迎使用企业职工信息管理系统***********************************************"); printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1.录入员工信息.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); printf("\n"); printf("?????????????????????????2.查询员工信息.???????????????????????????"); printf("\n"); printf("++++++++++++++++++++++++++++++++++++++++++++++++++3.修改员工信息.++++++++++++++++++++++++++++++++++++++++++++++++++++++"); printf("\n"); printf("—————————————————————————4.删除员工信息!—————————————————————————— "); printf("\n"); printf(" ★ 5.显示所有员工信息. "); printf(" ★ 6.统计员工信息. "); printf(" 7.排序员工信息."); printf(" 0.退出系统."); printf(" 制作人 "); system("pause"); } //录入 phone *Create() { phone *p1,*p2; int m,i; printf("请输入创建个数:"); scanf("%d",&m); for(i=1;i<=m;i++) { p1=(phone *)malloc(sizeof(phone)); printf("请输入第%d条信息!\n",i); printf("请输入职工号:\n"); scanf("%s",p1->num); printf("姓名:\n"); scanf("%s",p1->name); printf("性别:\n"); scanf("%s",p1->sex); printf("出生年月:\n"); scanf("%s",p1->year); printf("学历:\n"); scanf("%s",p1->school); printf("职务:\n"); scanf("%s",p1->zhiwei); printf("工资:\n"); scanf("%s",p1->money); printf("地址:\n"); scanf("%s",p1->address); printf("电话:\n"); scanf("%s",p1->tel); p1->next=NULL; if(head->next==NULL) head->next = p1; else { for(p2=head;p2->next!=NULL;p2=p2->next); //找到结点尾 p2->next = p1; } } printf("信息已添加!\n"); head=write_in(head); return head; //保存到链表 } //查找员工信息 void Find() { phone *p; char name[50]; if(head->next==NULL) { printf("此系统为空!\n"); return; } printf("请输入要查找的姓名:\n"); scanf("%s",&name); for(p=head->next;p!=NULL;p=p->next) { if(strcmp(p->name,name)==0) { printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t地址\t电话\n"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->school,p->zhiwei,p->money,p->address,p->tel); } else if(p->next==NULL) printf("无此信息!\n"); } head=write_in(head); } //修改员工信息 void Alter() { head=write_out(); char name[50]; //先查找 后删除 phone *p=head->next; if (p == NULL) { printf("此系统为空!\n"); return; } printf("请输入要修改的姓名:\n"); scanf("%s",name); while(p!=NULL) { if(strcmp(p->name,name)==0) { printf("请输入需要插入的信息"); printf("姓名:\n"); scanf("%s",p->name); printf("性别:\n"); scanf("%s",p->sex); printf("出生年月:\n"); scanf("%s",p->year); printf("学历:\n"); scanf("%s",p->school); printf("职务:\n"); scanf("%s",p->zhiwei); printf("工资:\n"); scanf("%s",p->money); printf("地址:\n"); scanf("%s",p->address); printf("电话:\n"); scanf("%s",p->tel); break; } } printf("修改成功"); head=write_in(head); } //删除员工信息 void Delete() { head=write_out(); char name[50]; //先查找 后删除 phone *p = head->next, *p1 =head->next,*p2; if (head->next == NULL) { printf("此通讯录为空!\n"); return; } printf("请输入要删除的姓名:\n"); scanf(" %s",name); while ((strcmp(p->name,name)!=0 )&& p->next != NULL) { p1=p; p =p->next; } if (strcmp(name, p->name)==0) //输出删除信息 { if (p == head->next&&p->next!=NULL) head->next = p->next; else if(p==head->next&&p->next==NULL) { head->next=p->next; printf("信息已删除,先此通讯录为空!!\n"); return; } else p1->next = p->next; } else { printf("此信息不存在!!!\n"); return; } printf("此信息已删除!"); printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t地址\t电话\n"); for(p2=head->next;p2!=NULL;p2=p2->next) printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->school,p->zhiwei,p->money,p->address,p->tel); head=write_in(head); } //显示所有员工记录 void List() { head=write_out(); phone *p; if(head->next==NULL) { printf("此系统中无记录!\n"); return; } printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t地址\t电话\n"); for(p=head->next;p!=NULL;p=p->next) printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->school,p->zhiwei,p->money,p->address,p->tel); } int main() { int choice; char yes_no; Initiate(); do { Menu(); printf("请选择0-5的数字\n"); scanf("%d",&choice); printf("\n"); switch(choice) { case 1:Create(); break; case 2:Find(); break; case 3:Alter(); break; case 4:Delete(); break; case 5:List(); break; case 6:tongji(); break; case 7:paixu(); break; case 0: printf("************感谢您的使用************\n"); exit(0); break; default: printf("输入有误!请重新输入\n"); break; } printf("是否继续 Y or N? \n"); do { scanf("%c",&yes_no); }while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n'); }while(yes_no=='Y'||yes_no=='y'); } enum Color { black, blue, green, lakeBlue, red, purple, yellow, white, gray, lightBlue, lightGreen, lightSimpleGreen, lightRed, lightPurple, lightYellow, brightWhite }; void setColor(unsigned short backColor=0, unsigned short textColor=7){ char command[9]="color 07"; //默认颜色 command[6]='0'+backColor; //将backColor变量改为字符型 command[7]='0'+textColor; //将textColor变量改为字符型 system(command); //调用系统函数 } void tongji() { int n=0; phone *p; char school[50]; if(head->next==NULL) { printf("此系统为空!\n"); return; } printf("请输入要查找的学历:\n"); scanf("%s",&school); for(p=head->next;p!=NULL;p=p->next) { if(strcmp(p->school,school)==0) { printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\t地址\t电话\n"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->school,p->zhiwei,p->money,p->address,p->tel); n++; } else if(p->next==NULL) printf("无此信息!\n"); } printf("该学历人数有%d",n); printf("\n"); head=write_in(head); }
这个代码怎么改成用链表写?跪求
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 100 typedef struct Books { char num[20]; char name[20]; char author[20]; int price; int total; char introduce[50]; }ppz; ppz ppz[N]; void Addppz(ppz *p, int i); void deleteppz(char ppzNum[]); void judge(int jdg); void paixu(ppz ppz[], int n); void swapmessage(ppz *p, ppz *q); void outputInfo(ppz *p); void updatebook(char ppzNum[]); void Searchbook(char ppzNum[]); int i, tmp=0, flag = 1, menu; int main() { while (flag) { do { printf("------------------------------------------------------------------------------------------\n"); printf("| Hello |\n"); printf("| 请输入想要实现的功能选项 |\n"); printf("| 1、录入新书籍 |\n"); printf("| 2、删除指定书籍 |\n"); printf("| 3、价格从小到大排序书籍 |\n"); printf("| 4、修改指定书籍 |\n"); printf("| 5、查询指定书籍 |\n"); printf("| 6、退出 |\n"); printf("------------------------------------------------------------------------------------------\n"); printf("\n"); printf("请输入选项:"); scanf("%d", &menu); } while (menu>6 || menu<1); judge(menu); } getchar(); getchar(); getchar(); } void judge(int jdg) { int n; char ppzNum[20]; switch (jdg) { case 1: printf("请输入要录入书籍的个数:"); scanf("%d", &n); for (i = tmp; i<n + tmp; i++) { Addppz(&ppz[i], i); } tmp = n + tmp; break; case 2: printf("请输入要删除的书号:"); scanf("%s", ppzNum); deleteppz(ppzNum); break; case 3: paixu(ppz,tmp); printf("排序后:\n"); for (i = 0; i < tmp; i++) { outputInfo(&ppz[i]); } break; case 4: printf("请输入要修改的书号:"); scanf("%s", ppzNum); updatebook(ppzNum); break; case 5: printf("请输入要查询的书号:"); scanf("%s", ppzNum); Searchbook(ppzNum); break; case 6: flag = 0; break; } } void Addppz(ppz *p, int i) { printf("请录入第%d本书:\n",i+1); printf("请输入书号:"); scanf("%s",p->num); printf("请输入书名:"); scanf("%s", p->name); printf("请输入作者:"); scanf("%s", p->author); printf("请输入单价:"); scanf("%d", &(p->price)); printf("请输入数量:"); scanf("%d", &(p->total)); printf("请输入简介:"); scanf("%s", p->introduce); } void deleteppz(char ppzNum[]) { int index=0; for (i = 0; i<tmp; i++) { if (strcmp(ppzNum, ppz[i].num) == 0) { for (int j = i; j<tmp - 1; j++) { strcpy(ppz[j].num ,ppz[j + 1].num); strcpy(ppz[j].name, ppz[j + 1].name); strcpy(ppz[j].author, ppz[j + 1].author); strcpy(ppz[j].introduce, ppz[j + 1].introduce); ppz[j].price = ppz[j].price; ppz[j].total = ppz[j].total; tmp = tmp - 1; index = 1; break; } } } if (index) { printf("已经删除该书籍信息\n"); }else { printf("没有找到该书籍\n"); } } void paixu(ppz ppz[],int n) { int i, j; for (i = 0; i < n - 1;i++) { for (j = 0; j < n - 1-i;j++) { if (ppz[j].price > ppz[j+1].price) { swapmessage(&ppz[j],&ppz[j+1]); } } } } void swapmessage(ppz *p,ppz *q) { ppz trmp; trmp = *p; *p = *q; *q = trmp; } void outputInfo(ppz *p) { printf("%s\t%s\t%s\t%d\t%d\t%s\n", p->num, p->name, p->author, p->price, p->total, p->introduce); } void updatebook(char ppzNum[]) { int index = 0; for (i = 0; i<tmp; i++) { if (strcmp(ppzNum, ppz[i].num) == 0) { printf("请修改图书馆第%d本书:\n", i + 1); printf("请修改书号:"); scanf("%s", ppz[i].num); printf("请修改书名:"); scanf("%s", ppz[i].name); printf("请修改作者:"); scanf("%s", ppz[i].author); printf("请修改单价:"); scanf("%d", &(ppz[i].price)); printf("请修改数量:"); scanf("%d", &(ppz[i].total)); printf("请修改简介:"); scanf("%s", ppz[i].introduce); index = 1; break; } } if (index==1) { printf("已经修改该书籍信息\n"); } else { printf("没有找到该名称书籍\n"); } } void Searchbook(char ppzNum[]) { int index = 0; for (i = 0; i<tmp; i++) { if (strcmp(ppzNum, ppz[i].num) == 0) { outputInfo(&ppz[i]); index = 1; break; } } if (index==1) { printf("已经查询到该书籍信息\n"); } else { printf("没有找到该名称的书籍\n"); } }
学生考勤系统的代码,修改revise和删除delete的函数不能运行,求大牛修改一下?
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define LEN sizeof(struct student) typedef struct user { char name[10]; char password[10]; }user; typedef struct u_node { user data; struct u_node *next; }u_node,*u_list; FILE *fp1; struct subject { char subject_name[50]; char student_name[50]; int people_num; int late_sum; /*迟到次数*/ int leave_early_sum; /*早退次数*/ int absenteeism_sum; /*旷课次数*/ int absent_sum; /*请假次数*/ int id; }; struct student { char student_name[50]; /*学生姓名*/ int id; /*学号*/ int data; /*日期*/ char lesson_name[50]; /*课程名称*/ int lesson_time; /*课程节次*/ int late_num; int leave_early_num; int absenteeism_num; int absent_num; int student_sum; /*学生总数*/ struct student *next; char str[20]; }; struct subject a[100]; /*结构体数组*/ struct subject b[100]; struct subject b1[100]; struct subject b2[100]; struct subject b3[100]; struct subject b4[100]; struct student s[100]; int student_num; struct student *input() /*1.建立学生考勤纪录*/ { int i,j; struct student *head,*p1,*p2; printf(" 下列内容请不要包含【空格】\n"); printf(" 请输入新建立考勤表的总人数:"); scanf("%d",&j); head=p2=NULL; /*做空表*/ p1=(struct student*)malloc(LEN); printf(" 请输入第 1 名学生的姓名"); scanf("%s",p1->student_name); printf(" 请输入第 1 名学生的学号"); scanf("%d",&p1->id); printf(" 请输入课程日期"); scanf("%d",&p1->data); printf(" 请输入课程名称"); scanf("%s",p1->lesson_name); printf(" 请输入课程节次"); scanf("%d",&p1->lesson_time); printf(" 请输入迟到次数"); scanf("%d",&p1->late_num); printf(" 请输入早退次数"); scanf("%d",&p1->leave_early_num); printf(" 请输入旷课次数"); scanf("%d",&p1->absenteeism_num); printf(" 请输入请假次数"); scanf("%d",&p1->absent_num); head=p1; p2=p1; student_num+=1; for(i=2;i<=j;i++) { p1=(struct student*)malloc(LEN); printf(" 请输入第 %d 名学生的姓名",i); scanf("%s",p1->student_name); printf(" 请输入第 %d 名学生的学号",i); scanf("%d",&p1->id); printf(" 请输入课程日期"); scanf("%d",&p1->data); printf(" 请输入课程名称"); scanf("%s",p1->lesson_name); printf(" 请输入课程节次"); scanf("%d",&p1->lesson_time); printf(" 请输入迟到次数"); scanf("%d",&p1->late_num); printf(" 请输入早退次数"); scanf("%d",&p1->leave_early_num); printf(" 请输入旷课次数"); scanf("%d",&p1->absenteeism_num); printf(" 请输入请假次数"); scanf("%d",&p1->absent_num); printf("\n"); printf(" 请及时保存文件!"); printf("\n"); p2->next=p1; p2=p1; student_num+=1; } p2->next=NULL; return(head); } struct student *enquire_subject(struct student *head) /*2.查询课程考勤纪录*/ { struct student *p1,*p2,*p3; char subject[50]; int i,k=1,num=1; p3=(struct student *)malloc(LEN); if(head==NULL) { printf(" 未录入该学生的信息!\n"); return(head); } p1=head; p2=p1->next; for(i=0;i<student_num;i++) { while(p2!=NULL) { p1->student_sum+=p1->late_num; p1->student_sum+=p1->leave_early_num; p1->student_sum+=p1->absenteeism_num; p1->student_sum+=p1->absent_num; p2->student_sum+=p1->late_num; p2->student_sum+=p1->leave_early_num; p2->student_sum+=p1->absenteeism_num; p2->student_sum+=p1->absent_num; if(p2->student_sum>p1->student_sum) /* 若未上课次数p2>p1,则进行交换*/ { p3->late_num=p2->late_num; /*将p2的数据复制到p3*/ p3->leave_early_num=p2->leave_early_num; p3->absenteeism_num=p2->absenteeism_num; p3->absent_num=p2->absent_num; p3->lesson_time=p2->lesson_time; p3->data=p2->data; p3->id=p2->id; strcpy(p3->lesson_name,p2->lesson_name); strcpy(p3->student_name,p2->student_name); p2->late_num=p1->late_num; /*将p1的数据复制到p2*/ p2->leave_early_num=p1->leave_early_num; p2->absenteeism_num=p1->absenteeism_num; p2->absent_num=p1->absent_num; p2->lesson_time=p1->lesson_time; p2->data=p1->data; p2->id=p1->id; strcpy(p2->lesson_name,p1->lesson_name); strcpy(p2->student_name,p1->student_name); p1->late_num=p3->late_num; /*将p3的数据复制到p1*/ p1->leave_early_num=p3->leave_early_num; p1->absenteeism_num=p3->absenteeism_num; p1->absent_num=p3->absent_num; p1->lesson_time=p3->lesson_time; p1->data=p3->data; p1->id=p3->id; strcpy(p1->lesson_name,p3->lesson_name); strcpy(p1->student_name,p3->student_name); } p1=p2; p2=p2->next; } p1=head; p2=p1->next; } printf(" 请输入要查询的学科:"); scanf("%s",subject); printf("\n\n"); p1=head; while(p1!=NULL) { if(k==1) { printf(" 下列显示**%s**学科的考勤记录:",subject); printf("\n\n"); k++; } if(strcmp(subject,p1->lesson_name)==0) printf("%5d 学号:%8d 学生姓名:%4s 日期:%4d 节次:%2d 迟到:%2d早退:%2d旷课:%2d请假:%2d\n",num,p1->id,p1->student_name,p1->data,p1->lesson_time,p1->late_num,p1->leave_early_num,p1->absenteeism_num,p1->absent_num); p1=p1->next; num++; } printf("\n\n"); return(head); } struct student *enquire_student(struct student *head) /*3.查询学生考勤纪录*/ { struct student *p1,*p2,*p3; char student[50]; int i,k=1,num=1; p3=(struct student *)malloc(LEN); if(head==NULL) { printf(" 未录入该学生的信息!\n"); return(head); } p1=head; p2=p1->next; for(i=0;i<student_num;i++) { while(p2!=NULL) { p1->student_sum+=p1->late_num; p1->student_sum+=p1->leave_early_num; p1->student_sum+=p1->absenteeism_num; p1->student_sum+=p1->absent_num; p2->student_sum+=p1->late_num; p2->student_sum+=p1->leave_early_num; p2->student_sum+=p1->absenteeism_num; p2->student_sum+=p1->absent_num; if(p2->student_sum>p1->student_sum) /* 若未上课人数p2>p1,则进行交换*/ { p3->late_num=p2->late_num; /*将p2的数据复制到p3*/ p3->leave_early_num=p2->leave_early_num; p3->absenteeism_num=p2->absenteeism_num; p3->absent_num=p2->absent_num; p3->lesson_time=p2->lesson_time; p3->data=p2->data; p3->id=p2->id; strcpy(p3->lesson_name,p2->lesson_name); strcpy(p3->student_name,p2->student_name); p2->late_num=p1->late_num; /*将p1的数据复制到p2*/ p2->leave_early_num=p1->leave_early_num; p2->absenteeism_num=p1->absenteeism_num; p2->absent_num=p1->absent_num; p2->lesson_time=p1->lesson_time; p2->data=p1->data; p2->id=p1->id; strcpy(p2->lesson_name,p1->lesson_name); strcpy(p2->student_name,p1->student_name); p1->late_num=p3->late_num; /*将p3的数据复制到p1*/ p1->leave_early_num=p3->leave_early_num; p1->absenteeism_num=p3->absenteeism_num; p1->absent_num=p3->absent_num; p1->lesson_time=p3->lesson_time; p1->data=p3->data; p1->id=p3->id; strcpy(p1->lesson_name,p3->lesson_name); strcpy(p1->student_name,p3->student_name); } p1=p2; p2=p2->next; } p1=head; p2=p1->next; } printf(" 请输入要查询的学生:"); scanf("%s",student); printf("\n\n"); p1=head; while(p1!=NULL) { if(k==1) { printf(" 下列显示**%s**的课程考勤记录:",student); printf("\n\n"); k++; } if(strcmp(student,p1->student_name)==0) printf("%5d 日期:%4d 课程名称:%4s 节次:%2d 迟到:%2d 早退:%2d 旷课:%2d 请假:%2d\n",num,p1->data,p1->lesson_name,p1->lesson_time,p1->late_num,p1->leave_early_num,p1->absenteeism_num,p1->absent_num); p1=p1->next; num++; } printf("\n\n"); return(head); } struct student *revise(struct student *head) /*4.修改学生考勤纪录*/ { struct student *p1,*p2; char revise_name[50]; char revise_subject[50]; int i,j,revise_data; p2=(struct student *)malloc(LEN); p1=head; printf(" 请输入要修改的学生姓名:"); scanf("%s",revise_name); printf(" 请输入要修改的学科:"); scanf("%s",revise_subject); printf(" 请输入要修改的日期:"); scanf("%s",&revise_data); if(head==NULL) { printf(" 未录入该学生的信息!\n"); return(head); } while(strcmp(revise_name,p1->student_name)!=0||strcmp(revise_subject,p1->lesson_name)!=0&&(p1->next!=NULL)); { p1=p1->next; } if(strcmp(revise_name,p1->student_name)==0&&(strcmp(revise_subject,p1->lesson_name)==0)&&(revise_data==p1->data))/*核对学生姓名,学科,日期*/ { printf(" -----------------------------------------\n"); printf(" -----------1.修改学生的基本信息-----------\n"); printf(" -----------2.修改课程的相关信息-----------\n"); /*修改目录*/ printf(" -----------------------------------------\n"); scanf("%d",&i) ; switch(i) { case 1: printf(" -----------1.修改学生的姓名-----------\n"); printf(" -----------2.修改学生的学号-----------\n"); scanf("%d",&j); if(j==1) { printf(" -----------请输入新的学生姓名-----------\n"); scanf("%s",p1->student_name); } else { printf(" -----------请输入新的学生学号-----------\n"); scanf("%d",&p1->id); } break; case 2: printf(" -----------1.修改课程的日期-----------\n"); printf(" -----------2.修改课程的名称-----------\n"); printf(" -----------3.修改课程的节次-----------\n"); scanf("%d",&j); if(j==1) { printf(" -----------请输入新的课程日期-----------\n"); scanf("%d",&p1->data); } else if(j==2) { printf(" -----------请输入新的课程名称-----------\n"); scanf("%s",p1->lesson_name); } else { printf(" -----------请输入新的课程节次-----------\n"); scanf("%d",&p1->lesson_time); } break; case 3: printf(" -----------1.修改迟到的次数-----------\n"); printf(" -----------2.修改早退的次数-----------\n"); printf(" -----------3.修改旷课的次数-----------\n"); printf(" -----------3.修改请假的次数-----------\n"); scanf("%d",&j); if(j==1) { printf(" -----------请输入新的迟到次数-----------\n"); scanf("%d",&p1->late_num); } else if(j==2) { printf(" -----------请输入新的早退次数-----------\n"); scanf("%d",&p1->leave_early_num); } else if(j==3) { printf(" -----------请输入新的旷课次数-----------\n"); scanf("%d",&p1->absenteeism_num); } else { printf(" -----------请输入新的请假次数-----------\n"); scanf("%d",&p1->absent_num); } break; } } return(head); } void save(struct student *head) /*5.保存学生考勤纪录*/ { struct student *p1; p1=head; fp1=fopen("studentattendance.txt","a+"); /*保存文件*/ while(p1!=NULL) { fwrite(p1,LEN,1,fp1); p1=p1->next; } fclose(fp1); printf(" 保存成功! \n"); } struct student *output() /*6.查看学生考勤纪录*/ { struct student *p=NULL,*q=NULL,*head=NULL; struct student message[1000]; int i=0,j=0; if((fp1=fopen("studentattendance.txt","rb+"))==NULL) { printf(" 未找到此文件!\n"); return(head); } while(!feof(fp1)) { if(fread(&message[i],LEN,1,fp1)!=1) { if(feof(fp1)) { fclose(fp1); break; } printf(" 文件读取失败!\n"); } i++; } j=i; p=(struct student *)malloc(LEN); q=(struct student *)malloc(LEN); head=p; for(i=0;i<j;i++) { p->late_num=message[i].late_num; p->leave_early_num=message[i].leave_early_num; p->absenteeism_num=message[i].absenteeism_num; p->absent_num=message[i].absent_num; p->lesson_time=message[i].lesson_time; p->data=message[i].data; p->id=message[i].id; strcpy(p->lesson_name,message[i].lesson_name); strcpy(p->student_name,message[i].student_name); q->next=p; q=p; p=(struct student *)malloc(LEN); } q->next=NULL; return(head); } void print(struct student *head) /*自动显示考勤纪录*/ { struct student *p; p=head; if(p==NULL) { printf(" 未录入该学生的信息!\n"); } while(p!=NULL) { printf("学号:%8d学生姓名:%4s 日期:%4d 学科:%4s ",p->id,p->student_name,p->data,p->lesson_name); printf("迟到:%2d 早退:%2d 旷课:%2d 请假:%2d\n",p->late_num,p->leave_early_num,p->absenteeism_num,p->absent_num); p=p->next; } } struct student *count_subject(struct student *head) /*7.统计课程考勤纪录*/ { int n=1,i,j,num; int max_time,min_time,lesson_data; struct student *p1; char name[50]; if(head==NULL) { printf(" 未录入该学生的信息!\n"); return(head); } for(i=0;i<n;i++) { printf(" 请输入要统计的课程名称:"); scanf("%s",a[i].subject_name); a[i].people_num=0; } printf(" 请输入查询课程的日期:"); scanf("%d",&lesson_data); printf(" 请输入查询节次的起始时间:"); scanf("%d",&min_time); printf(" 请输入查询节次的终止时间:"); scanf("%d",&max_time); p1=head; for(i=0;i<n;i++) { while(p1!=NULL&&min_time<=p1->lesson_time&&p1->lesson_time<=max_time&&p1->data==lesson_data) { if(strcmp(a[i].subject_name,p1->lesson_name)==0) a[i].late_sum+=p1->late_num; a[i].leave_early_sum+=p1->leave_early_num; a[i].absenteeism_sum+=p1->absenteeism_num; a[i].absent_sum+=p1->absent_num; a[i].people_num+=p1->late_num; a[i].people_num+=p1->leave_early_num; a[i].people_num+=p1->absenteeism_num; a[i].people_num+=p1->absent_num; p1=p1->next; } p1=head; } for(j=0;j<n-1;j++) for(i=0;i<n-1-j;i++) { if(a[i].people_num<a[i+1].people_num) { num=a[i+1].people_num; a[i+1].people_num=a[i].people_num; a[i].people_num=num; strcpy(name,a[i+1].subject_name); strcpy(a[i+1].subject_name,a[i].subject_name); strcpy(a[i].subject_name,name); } } for(i=0;i<n;i++) { printf("课程名称:%4s 迟到总人数:%4d 早退总人数:%4d 旷课总人数:%4d 请假总人数:%4d\n",a[i].subject_name,a[i].late_sum,a[i].leave_early_sum,a[i].absenteeism_sum,a[i].absent_sum); a[i].late_sum=0; a[i].leave_early_sum=0; a[i].absenteeism_sum=0; a[i].absent_sum=0; return(head); } } struct student *count_student(struct student *head) /*8.统计学生考勤纪录*/ { int n=1,i,j,num; int max_time,min_time; struct student *p1; char name[50]; if(head==NULL) { printf(" 未录入该学生的信息!\n"); return(head); } for(i=0;i<n;i++) { printf(" 请输入要统计的学生姓名:"); scanf("%s",b[i].student_name); b[i].people_num=0; } p1=head; for(i=0;i<n;i++) { while(p1!=NULL) { if(strcmp(b[i].student_name,p1->student_name)==0) b1[i].late_sum+=p1->late_num; b2[i].leave_early_sum+=p1->leave_early_num; b3[i].absenteeism_sum+=p1->absenteeism_num; b4[i].absent_sum+=p1->absent_num; b[i].people_num+=p1->late_num; b[i].people_num+=p1->leave_early_num; b[i].people_num+=p1->absenteeism_num; b[i].people_num+=p1->absent_num; b[i].id=p1->id; p1=p1->next; } p1=head; } for(j=0;j<n-1;j++) for(i=0;i<n-1-j;i++) { if(b[i].people_num<b[i+1].people_num) { num=b[i+1].people_num; b[i+1].people_num=b[i].people_num; b[i].people_num=num; strcpy(name,b[i+1].student_name); strcpy(b[i+1].student_name,b[i].student_name); strcpy(b[i].student_name,name); } } for(i=0;i<n;i++) { printf("学生姓名:%4s 学号:%8d 迟到次数:%2d 早退次数:%2d 旷课次数:%2d 请假次数:%2d\n",b[i].student_name,b[i].id,b1[i].late_sum,b2[i].leave_early_sum,b3[i].absenteeism_sum,b4[i].absent_sum); b1[i].late_sum=0; b2[i].leave_early_sum=0; b3[i].absenteeism_sum=0; b4[i].absent_sum=0; return(head); } } void delete(struct student *head) { FILE *fp; struct student *p1,*p2; int n; p2=head; printf("请输入你要删除的学号:"); scanf("%d",&n); for(p1=head->next;p1!=NULL;p1=p1->next) { if(p1->id==n) { p2->next=p1->next; free(p1); printf("\n删除成功!\n"); break; } p2=p1; } fp=fopen("studentattendance.txt","w"); for(p1=head->next;p1!=NULL;p1=p1->next) fprintf("%s %d %d %s %d %d %d %d %d",p1->student_name,p1->id,p1->data,p1->lesson_name,p1->lesson_time,p1->late_num,p1->leave_early_num,p1->absenteeism_num,p1->absent_num); } void main() /*登陆系统*/ { struct student *head; int a,b,c,n; zhuye:printf(" ----------欢迎使用学生考勤管理系统------------\n\n\n"); printf(" -------------请按1进入系统---------------\n\n\n") ; scanf("%d",&a); if(a==1) { login(); do { printf(" ********************目录********************\n\n"); printf(" ********1.建立学生考勤纪录********\n"); printf(" ********2.查询课程考勤纪录********\n"); printf(" ********3.查询学生考勤纪录********\n"); printf(" ********4.修改学生考勤纪录********\n"); printf(" ********5.保存学生考勤纪录********\n"); printf(" ********6.查看学生考勤纪录********\n"); printf(" ********7.统计课程考勤纪录********\n"); printf(" ********8.统计学生考勤纪录********\n"); printf(" ********9.删除学生考勤纪录********\n"); printf(" *******10.退出考勤管理系统********\n\n"); printf(" ********************************************\n\n"); scanf("%d",&b); switch(b) { case 1: head=input(); print(head); /*调用函数输出节点*/ break; case 2: head=enquire_subject(head); break; case 3: head=enquire_student(head); break; case 4: head=revise(head); print(head); break; case 5: save(head); break; case 6: head=output(); print(head); break; case 7: head=count_subject(head); /*调用函数统计以head为头的链表*/ break; case 8: head=count_student(head); break; case 9: delete(head); break; } }while(b!=10); } else { printf(" *********************************************\n\n"); printf(" **************返回主页请按1**************\n\n"); printf(" *********************************************\n\n"); scanf("%d",&c); if(c=1) goto zhuye; } } int login() { int x,i; u_list head,p,r; user s,t; FILE *fp; printf(" ***********************学生考勤系统***********************\n\n") ; printf("\n ---------------------1.登录 2.注册---------------------\n"); printf("\n ---------------------请输入 1 或 2---------------------\n"); scanf("%d",&x); if(x==1) { i=0; while(i<=3) { printf("\n 登录账号:"); /*登录程序*/ scanf("%s",s.name); printf("\n"); printf("\n 登录密码:"); scanf("%s",s.password); fp=fopen("user.txt","a+"); /*保存在与用户的考勤记录不同的文件里*/ while(!feof(fp)) { fscanf(fp,"%s %s ",t.name,t.password); if(strcmp(t.name,s.name)==0&&strcmp(s.password,t.password)==0) { printf("\n\n 登录成功!查询,修改,统计前请先点击数字6,选择查看学生考勤记录!\n\n\n"); return 1; } } printf("\n 账号或密码错误!请重新登录!\n"); fclose(fp); i++; if(i==3) {printf("\n 已经输入错误三次!!!\n");getchar();getchar();exit(1);} } } else { while(1) { printf("\n 注册账号:"); /*注册程序*/ scanf("%s",s.name); printf("\n"); printf("\n 注册密码:"); scanf("%s",s.password); printf("\n"); fp=fopen("user.txt","r"); head=(u_list)malloc(sizeof(u_node)); head->next=NULL; r=head; while(!feof(fp)) { p=(u_list)malloc(sizeof(u_node)); fscanf(fp,"%s %s ",(p->data).name,(p->data).password); r->next=p; r=p; } r->next=NULL; fclose(fp); p=head->next; while(p) { if(strcmp((p->data).name,s.name)==0) {printf("\n 账号已注销!请重新登录!\n");break;} p=p->next; } if(!p) { fp=fopen("user.txt","a"); fprintf(fp,"%s %s ",s.name,s.password); fclose(fp); return 2; } } } }
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问