C语言+数据结构课程设计:日记管理系统实验报告
C语言课程设计学生信息管理系统实习报告电子版
![C语言课程设计学生信息管理系统实习报告电子版](https://img.taocdn.com/s3/m/0dc241f1b307e87100f6969d.png)
C语言课程设计学生信息管理系统实习报告电子版学生信息管理系统系部名称:电子工程系专业名称:电子信息技术班级:110112学号:11011221学生姓名:刘龙涛指导教师:顾军林时间:2012 年 5 月26日至2012年 6 月1 日*** Created on 11/8/2012 10:05:13 PM一、课程设计目的1,对C各部分知识的综合应用能力2,提高程序设计的能力3,提升对于较大程序的抽象分析设计能力4,学习调试和测试的技巧二、课程设计内容1,熟悉C实验环境~按给定的上机步骤练习完成,2,熟悉C程序的编辑~编译~链接和运行的过程。
3,编译一个应用系统程序~形成一个软件系统。
三、需求分析随着当今社会发展~信息化水平逐步提高~对教务管理有了新的要求~因此~编写一个信息管理系统是十分有必要的。
该软件主要是实现对学生信息进行系统化的管理~首先可以对学生基本信息进行输入和读取~其次查找并显示特定学生的相关信息~然后可以插入学生的相关信息~还有就是可按学生相关信息排序~以求达到简易操作的目的。
四、概要设计1(系统结构图,功能模块图,和数据变量说明主菜单输入列表查找增加修改排序退出2(功能模块说明1.输入模块2.列表模块开始开始-1 返回主程序输入输出列表 -1i=-1 返回主程序返回主程序输入数据-1返回主程序 i=-1第 1 页共 10页*** Created on 11/8/2012 10:05:13 PM3.查找模块4.修改模块开始开始读文件数据读文件数据输入num 输入numN N stu[i].num==nstu[i].num==n 返回主函数返回主函数 uum ? uum ?Y Y输出数据输出数据修改数据返回主函数显示数据 5.增加模块开始返回主函数读文件数据6.成绩排序列出数据开始s=i读文件数据 Yi=-1 返回主函数列出数据 N输入数据冒泡排序Yi=-1 返回主函数输入数据 N返回主函数第 2 页共 10页Created on 11/8/2012 10:05:13 PM五、运行情况1. 主菜单2.录入数据3.输出数据4.查找数据5.增加数据5.增加数据第 3 页共 10页Created on 11/8/2012 10:05:13 PM6.修改数据7.成绩排序8.退出系统第 4 页共 10页Created on 11/8/2012 10:05:13 PM六、设计体会和反思通过两周的上机实习,我对C语言又有了崭新的认识。
c语言课设实验报告-记事本程序(含源码)
![c语言课设实验报告-记事本程序(含源码)](https://img.taocdn.com/s3/m/148ee7d0ac51f01dc281e53a580216fc700a53a0.png)
C语言课设实验报告[记事本程序]班级:学号:姓名:指导老师:C语言课设实验报告#define key_down 80#define key_up 72#define key_esc 1#define key_alt_f 33#define key_alt_x 45#define key_enter 28#define key_alt_e 18int get_key();void box(int startx,int stary,int high,int width);{int i,key,x,y,l;char *w=NULL,*d=NULL,*s=NULL;FILE *fp;char *menu[]={ "File ", "Edit ","Format","View","Help"};char *red[]={ "F", "E","F","V","H"};char *f[]={ "New ", "Open" , "Save", "Another","Quit alt_x"};char *e[]={"Search","Search next","Replace","Date"};char buf[16*10*2],buf1[16*2];textbackground(3);clrscr();window(1,1,80,1);textbackground(WHITE);textcolor(BLUE);clrscr();window(1,1,80,2);for(i=0, l=0; i <5;i++){x=wherex();y=wherey();textcolor(BLACK);cprintf( " %s ",menu[i]);l=strlen(menu[i]);gotoxy(x,y); x.y等的头文件*//*功能键的扫描码的定义*//* i为循环次数的序数,key为从键盘输入的功能键,x,y 为光标的坐标,l为菜单栏中菜单的字符长度*//*w是存放输入的内容(记录的事情)的指针,*s是存放输入的文件名的指针,*d是存放输入要定时的文件的文件名的指针*/ /*菜单栏中各个菜单的定义*//*菜单栏中菜单开头要标颜色的字母的定义*//* file 子菜单中项目的定义*//*edit子菜单的定义*/ /*缓冲区的定义*//*整个大窗口的背景颜色设置*//*创建菜单栏窗口*/ /*设置菜单栏窗口背景颜色为白色,字体颜色为蓝色*//*利用循环输出menu菜单栏,有多少个菜单循环多少次。
C语言学生管理系统实验报告
![C语言学生管理系统实验报告](https://img.taocdn.com/s3/m/eedb5f34a417866fb94a8e32.png)
C语言案例设计实验报告实验二姓名:学号:专业:自动化课程名称:C语言程序设计指导教师:实验时间:实验地点:教师评分:实验目的和要求1、掌握软件设计开发调试的完整过程;2、掌握单链表,结构体,指针的使用方法;3、掌握使用CodeBlocks软件编程和调试的方法。
一、主要仪器设备及开发环境1、计算机2、CodeBlocks集成开发环境V13.12二、实验原理与分析设计3.1 设计内容1.显示菜单2.获取用户选择的菜单编号3.创建一个节点,他会返回一个新创建的学生信息节点的指针4.把学生信息节点加入到链表中5.返回指定编号学生节点的上一个节点的指针6.显示所有学生信息7.显示信息数量8.修改学生信息,参数为要修改的学生编号9.获取用户的选择10.获取用户输入的学生编号11.删除编号为num的学生信息12.删除所有学生信息13.把信息保存到文件中14.从文件中读取学生信息3.2 数据结构设计a.显示菜单 ShowMenu()b.获取用户选择的菜单编号 GetMenuChoose()C.创建一个节点,返回一个新创建的学生信息节点的指针PSTUDENT CreateStudent()d.把学生信息节点加入到链表中 AddStudent(PSTUDENT pstu)e.返回指定编号学生节点的上一个节点的指针PSTUDENT GetPrevAddr(int num)f.显示所有学生信息ShowAll()g.显示信息数量ShowStudentCount()f.修改学生信息,参数为要修改的学生编号ModityStudent(int num)g.获取用户的选择Question(const char *pstr)h.获取用户输入的学生编号GetInputNum()i.删除编号为num的学生信息DelStudent(int num)j.删除所有学生信息DelAll()k.把信息保存到文件中SaveToFile()l.从文件中读取学生信息 LoadFromFile()3.4 流程图四、程序设计4.1程序主函数int main(){i nt running=1;w hile(running){switch(GetMenuChoose()){case 0:running=0;break;case 1:printf("你选择了菜单1\n");AddStudent(CreateStudent());break;case 2:printf("你选择了菜单2\n");DelStudent(GetInputNum());break;case 3:printf("你选择了菜单3\n");break;case 4:printf("你选择了菜单4\n");ModityStudent(GetInputNum());break;case 5:printf("你选择了菜单5\n");DelAll();break;case 6:printf("你选择了菜单6\n");ShowAll();break;case 7:printf("你选择了菜单7\n");ShowStudentCount();break;case 8:printf("你选择了菜单8\n");TagStudent();break;case 9:printf("你选择了菜单9\n");SaveToFile();break;}system("pause");}r eturn 0;}4.2显示菜单void ShowMenu(){s ystem("cls");p rintf("------------------------------------------------------------------------");p rintf("\n\t1.添加学生信息 2.删除某个学生信息 3.显示某个学生信息\n");p rintf("\t4.修改学生信息 5.删除所有学生信息 6.显示所有学生信息\n");p rintf("\t7.显示信息数量8.读取文件学生信息9.保存学生信息至文件\n");p rintf("\t10.退出系统\n");p rintf("------------------------------------------------------------------------");}4.3获取用户选择的菜单编号int GetMenuChoose(){i nt num;//保存用户选择的菜单编号S howMenu();p rintf("请选择菜单(0~9):") ;/*scanf("%d %d",&aa,&b);函数返回值为int型,如果a和b都被成功读入,那么scanf的返回值就是2:如果只有a被成功读入,返回值为1:如果a和b都未被成功读入,返回值为0:如果遇到错误或遇到end of file,返回值为Eof。
c语言实习报告3篇
![c语言实习报告3篇](https://img.taocdn.com/s3/m/b7719e08bf23482fb4daa58da0116c175f0e1eaa.png)
c语言实习报告3篇c语言实习报告1在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的.学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1.加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
C语言课程设计课程管理系统实验报告
![C语言课程设计课程管理系统实验报告](https://img.taocdn.com/s3/m/7e42da681ed9ad51f01df286.png)
课程设计实验报告课程管理系统计算机科学与工程学院14060307班董永博14060307102陈佳兴14060307101田晨光14060307113赵炳舒14060307121欧静14060307126目录题目·······································----------------------------------------------------------------3分析过程与思路·····························-------------------------------------------------3算法·······································----------------------------------------------------------------5函数模块介绍·······························----------------------------------------------------9源程序·····································-------------------------------------------------------------10运行结果···································----------------------------------------------------------36课程设计总结·······························----------------------------------------------------42一.题目课程管理系统二.分析过程与思路课程管理系统首先要能够分别实现课程信息的增加、删除、查询、修改。
c课程设计的实验报告
![c课程设计的实验报告](https://img.taocdn.com/s3/m/6dc323ae0875f46527d3240c844769eae009a3c8.png)
c课程设计的实验报告C课程设计的实验报告引言:在计算机科学领域,C语言是一门广泛应用的编程语言,被广泛用于软件开发、嵌入式系统和操作系统等领域。
为了更好地掌握C语言的应用,我们进行了一项C课程设计的实验。
本实验报告旨在总结实验过程中的设计思路、方法和结果,并对实验的意义进行探讨。
实验目的:本次实验的目的是通过设计一个简单的学生成绩管理系统,来加深对C语言的理解和掌握。
通过实践,我们可以更好地熟悉C语言的语法和编程技巧,提高问题解决和代码调试的能力。
实验过程:1. 需求分析在开始编写代码之前,我们首先进行了需求分析。
我们需要设计一个学生成绩管理系统,能够实现学生信息录入、成绩查询、成绩统计和成绩排序等功能。
根据这些需求,我们确定了系统的基本功能和界面设计。
2. 系统设计在系统设计阶段,我们使用了结构化程序设计的方法。
我们将整个系统划分为多个模块,每个模块负责不同的功能。
我们使用了结构体来定义学生的信息,使用数组来存储多个学生的信息。
通过函数的调用和参数传递,实现了不同模块之间的交互。
3. 编码实现在编码实现阶段,我们按照设计的思路,逐步编写代码。
我们使用了C语言提供的基本语法和库函数,如输入输出函数、数组操作函数等。
我们注重代码的可读性和可维护性,使用了有意义的变量名和注释,使代码更易于理解和修改。
4. 调试测试在编写完代码后,我们进行了调试和测试。
我们逐行检查代码的逻辑,查找潜在的错误和漏洞。
我们使用了测试用例来验证代码的正确性,包括正常输入和异常输入的情况。
通过不断调试和修改,我们最终得到了一个稳定可靠的学生成绩管理系统。
实验结果:通过本次实验,我们成功地设计并实现了一个学生成绩管理系统。
该系统能够实现学生信息的录入、成绩查询、成绩统计和成绩排序等功能。
我们通过测试用例的验证,确保系统的正确性和稳定性。
该系统具有良好的用户界面和友好的交互方式,能够满足用户的基本需求。
实验总结:本次实验为我们提供了一个宝贵的机会,通过实践来巩固和拓展我们在C语言方面的知识和技能。
c语言学生管理系统课程设计报告总结 (2)
![c语言学生管理系统课程设计报告总结 (2)](https://img.taocdn.com/s3/m/4a5691217f21af45b307e87101f69e314332fa0a.png)
C语言学生管理系统课程设计报告总结1. 引言本报告总结了我们小组在C语言课程设计中开发的学生管理系统。
该系统旨在简化学校教务管理过程,提高教务工作效率,实现学生信息的快速查询、管理和统计。
本文将介绍系统的设计目标、主要功能模块以及我们在开发过程中遇到的挑战和解决方案。
2. 设计目标我们设计学生管理系统的主要目标是提供以下功能:•学生信息管理:包括学生基本信息的录入、查找、修改和删除操作。
•课程管理:包括课程信息的录入、查找、修改和删除操作。
•成绩管理:包括成绩录入、查询和统计功能。
•班级管理:包括班级信息的录入、查找、修改和删除操作。
3. 系统设计与实现3.1 数据结构设计为了存储学生信息、课程信息和成绩信息,我们设计了以下数据结构:•学生信息结构体:包含学生姓名、学号、性别、出生日期等字段。
•课程信息结构体:包含课程名称、课程号、学分等字段。
•成绩信息结构体:包含学生姓名、课程名称、分数等字段。
3.2 用户界面设计我们采用命令行界面来实现用户和系统的交互。
通过命令行菜单,用户可以选择不同的功能模块,并输入相应的命令进行操作。
我们通过C语言的输入输出函数来实现用户界面的显示和交互。
3.3 功能模块实现学生管理系统主要包含以下功能模块:•学生信息管理模块:实现学生信息的录入、查找、修改和删除操作。
•课程管理模块:实现课程信息的录入、查找、修改和删除操作。
•成绩管理模块:实现学生成绩的录入、查询和统计功能。
•班级管理模块:实现班级信息的录入、查找、修改和删除操作。
4. 开发过程中的挑战和解决方案在开发学生管理系统的过程中,我们遇到了以下挑战:1.数据存储和管理:如何有效地存储和管理大量的学生信息、课程信息和成绩信息。
我们采用了链表的数据结构来组织数据,通过指针进行关联和操作,以提高数据的访问效率。
2.用户界面设计:如何设计一个简洁、直观的用户界面,方便用户进行操作。
我们借鉴了其他类似系统的设计思路,采用了命令行菜单和命令交互的方式来实现用户界面,简化了用户操作的复杂性。
C语言课程设计报告 --学生管理系统
![C语言课程设计报告 --学生管理系统](https://img.taocdn.com/s3/m/3dcec2142e60ddccda38376baf1ffc4ffe47e286.png)
C语言课程设计报告 --学生管理系统一、实验目的:通过本次实验,学习C语言的语法和数据类型,设计一个简单的学生管理系统,结合文件I/O所学,可以将学生信息保存至文件中,再读取时自动填充至程序中。
同时,体验软件开发的流程,从需求分析到具体实现。
二、需求分析:1、学生信息包括:学号、姓名、性别、年龄、成绩。
2、学生信息需要添加、删除、修改、查找和显示。
3、程序启动时自动从文件中读取数据,退出时自动保存数据。
三、实验过程:1、确定数据结构和变量类型通过分析需求,学生信息包含多个属性,可以使用结构体来保存每个学生的信息。
同时,为了便于程序运行,需要定义一个链表来保存所有学生信息。
/* 学生信息结构体 */typedef struct _Student {char id[12]; // 学号char name[20]; // 姓名char gender; // 性别int age; // 年龄double score; // 成绩} Student;/* 学生信息链表节点 */typedef struct _StudentNode {Student data; // 学生信息struct _StudentNode *next; // 下一节点指针} StudentNode;/* 学生信息链表头节点 */StudentNode *head = NULL;2、设计主菜单功能考虑学生管理系统的主要功能,可以设计以下主菜单:---------------------------1. 添加学生2. 删除学生3. 修改学生信息4. 查找学生5. 显示所有学生6. 退出---------------------------可以使用一个while循环来循环处理,直到用户选择退出。
3、实现主菜单功能添加学生:先从用户输入中获取学生信息,然后创建一个新的学生信息节点,并将其添加到链表的末尾。
1. 定义变量/* 输入缓存区大小 */#define BUFFER_SIZE 2562. 实现函数/* 添加学生到链表末尾 */void add_student() {Student student; // 待添加的学生信息printf("请输入学号:");scanf("%s", student.id);printf("请输入姓名:");scanf("%s", );printf("请输入性别(M/F):");scanf(" %c", &student.gender);printf("请输入年龄:");scanf("%d", &student.age);printf("请输入成绩:");scanf("%lf", &student.score);StudentNode *node =(StudentNode*)malloc(sizeof(StudentNode));node->data = student;node->next = NULL;if (head == NULL) {head = node;} else {StudentNode *p = head;while (p->next != NULL) {p = p->next;}p->next = node;}printf("添加学生成功!\n");}删除学生:先从用户输入中获取学生学号,然后遍历链表,找到该学号对应的学生信息节点,并删除。
c语言课程信息管理系统实训总结
![c语言课程信息管理系统实训总结](https://img.taocdn.com/s3/m/68aa0232f56527d3240c844769eae009581ba2dc.png)
C语言课程信息管理系统实训总结一、项目背景1.1 项目目的本次实训的项目是为了让学生通过实践的方式提高C语言编程能力,了解信息管理系统的设计与实现。
1.2 项目内容通过本次实训,学生需要设计和实现一个基于C语言的课程信息管理系统,包括学生信息管理、课程信息管理、成绩管理等功能模块。
1.3 项目意义通过这个项目,学生将掌握C语言编程的基本技巧,加深对信息管理系统的理解,提高问题分析和解决能力。
二、项目实施过程2.1 项目需求分析在项目开始之前,首先进行了对需求的分析,明确了系统需要实现的功能模块和具体需求,为后续的开发工作奠定了基础。
2.2 系统设计基于需求分析的基础上,进行了系统的整体设计和模块设计,确定了系统的架构和各个模块之间的关系,明确了每个模块的功能和实现方式。
2.3 编码实现在系统设计完成后,学生开始进行编码实现,根据设计文档和模块需求进行编码工作,实现每个功能模块的具体逻辑。
2.4 测试调试编码实现完成后,进行了系统的测试和调试工作,确保系统的稳定性和功能的正确性,对系统进行了全面的测试覆盖。
三、项目总结与反思3.1 项目成果通过本次实训,学生们成功地设计并实现了一个完整的C语言课程信息管理系统,包括学生信息管理、课程信息管理、成绩管理等功能模块,实现了项目的预期目标。
3.2 学习收获通过这个项目,学生们不仅加深了对C语言编程的理解和掌握,还了解了信息管理系统的设计和实现方法,培养了问题分析和解决能力,提高了团队协作能力。
3.3 反思与展望在项目实施的过程中,我们也发现了一些问题和不足,比如需求分析不够清晰、部分模块设计不够合理等,对这些问题进行了总结和反思,并为未来的项目实施提出了改进和完善的建议。
四、结语通过本次C语言课程信息管理系统实训,学生们不仅掌握了C语言编程的基本技巧,而且加深了对信息管理系统的理解,提高了问题分析和解决能力。
希望学生们能够将实训中所学到的知识应用于实际工作中,不断提高自己的技术水平,为未来的职业发展打下坚实的基础。
数据结构C语言版 实验报告
![数据结构C语言版 实验报告](https://img.taocdn.com/s3/m/6e9fd752773231126edb6f1aff00bed5b9f373fa.png)
数据结构C语言版实验报告《数据结构 C 语言版实验报告》一、实验目的本次实验旨在通过使用 C 语言实现常见的数据结构,加深对数据结构基本概念和操作的理解,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019三、实验内容1、线性表顺序表的实现链表的实现(包括单向链表、双向链表)2、栈和队列栈的实现(顺序栈、链栈)队列的实现(顺序队列、循环队列、链队列)3、数组和字符串数组的基本操作字符串的操作(字符串的存储、字符串的比较、字符串的连接等)4、树和二叉树二叉树的遍历(前序、中序、后序)二叉树的创建和基本操作5、图图的存储(邻接矩阵、邻接表)图的遍历(深度优先遍历、广度优先遍历)四、实验步骤1、线性表顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除、查找等操作。
编写测试程序,对顺序表的各种操作进行测试。
链表的实现定义单向链表和双向链表的数据结构,包括节点结构体。
实现链表的创建、插入、删除、查找等操作。
编写测试程序,验证链表操作的正确性。
栈的实现定义顺序栈和链栈的数据结构。
实现栈的入栈、出栈、栈顶元素获取等操作。
进行栈的操作测试。
队列的实现定义顺序队列、循环队列和链队列的数据结构。
实现队列的入队、出队、队头队尾元素获取等操作。
对队列的操作进行测试。
3、数组和字符串数组的操作实现数组的初始化、元素访问、数组元素的修改等。
测试数组的基本操作。
字符串的操作定义字符串的存储方式。
实现字符串的比较、连接、复制等操作。
编写测试用例,验证字符串操作的准确性。
二叉树的遍历采用递归方式实现二叉树的前序、中序、后序遍历。
输出遍历结果进行验证。
二叉树的创建和基本操作构建二叉树的数据结构。
实现二叉树的节点插入、删除等操作。
5、图图的存储分别用邻接矩阵和邻接表来存储图。
实现图的初始化操作。
图的遍历用深度优先遍历和广度优先遍历算法对图进行遍历。
C语言《数据结构》课程设计上机实习报告学生成绩管理系统
![C语言《数据结构》课程设计上机实习报告学生成绩管理系统](https://img.taocdn.com/s3/m/077eb7a5192e45361066f5e4.png)
《数据结构》课程设计上机实习报告课设题目学生成绩管理系统系部信息系班级计算机xxx学生姓名xxx学号xxx序号 5指导教师xxx时间2013.12.23~2013.1.4学生成绩管理系统一、设计目的1.进一步熟悉VC++开发环境,熟悉用C语言完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。
2.通过此设计,了解《数据结构》课程中图的逻辑结构和物理结构;掌握有关图的相关实际应用以及对应算法的原理与具体实现;体会数据结构在解决现实问题中的作用和重要性。
3.通过此设计,学会分析算法时间复杂度和空间复杂度的方法,针对求解相同问题的不同算法,掌握对其性能的比较策略。
4.提高对于较大程序的抽象分析设计能力5.学习调试和测试程序,检查错误二、设计内容1.设计题目:学生信息管理系统的设计2.问题描述:出于对大量学生的统一信息管理目的,要求编制一个简易的学生成绩管理系统,提供读取学生信息功能、查询学生信息功能、显示学生信息功能、插入学生信息功能、删除学生信息功能、保存新的学生信息功能,实现系统各个功能。
3.基本要求:在主菜单中设计功能菜单,利用菜单调用各个函数,分别完成图1所示各种功能:图1 系统功能模块图1)设计在相应存储结构(邻接矩阵或邻接表)下的图的类型声明。
2)创建单链表,将文本文件中的学生成绩信息存储到单链表中。
3)查询操作,可通过序号或姓名查询学生信息。
4)显示操作,将所有成绩信息在屏幕上显示。
5)插入操作,在已经创建的单链表中进行插入操作,在第i 条记录后插入1条新的记录,并显示所有信息。
6)删除操作,在单链表中进行删除图书操作,查找第i 条记录,找到后删除该条记录,并显示所有信息。
7)保存数据文件功能。
三、数据结构说明1.首先编写主菜单将子函数显示出来,然后利用switch函数一一对应选项调用子函数。
2. 定义结构体stu和单链表结构体变量struct Node,用fopen函数读取文本信息,定义一个头指针L和结构体变量s1。
C语言学生管理系统_综合实验报告
![C语言学生管理系统_综合实验报告](https://img.taocdn.com/s3/m/fc1be66c443610661ed9ad51f01dc281e53a562d.png)
C语言学生管理系统_综合实验报告一、引言学生管理系统是一种方便高校进行学生信息管理的工具,具备添加、删除、查询、修改等基本功能,可以提高学校教务部门的工作效率,减少人力资源的浪费。
本文将介绍一个基于C语言的学生管理系统的设计和实现。
二、系统设计1.需求分析学生管理系统主要包括学生信息、教师信息和课程信息的录入、查询、修改和删除等功能,同时要求可以按照学号、姓名等字段进行快速检索。
系统还需要能够自动生成学生的成绩单和课程表,方便学生进行查看。
2.系统架构学生管理系统采用客户端-服务器模式,客户端和服务器之间通过网络进行数据传输。
客户端通过命令行界面与用户交互,服务器负责处理客户端发送的请求并返回相应的结果。
3.系统功能模块(1)学生信息管理模块:包括学生信息的添加、查询、修改和删除等功能。
(2)教师信息管理模块:包括教师信息的添加、查询、修改和删除等功能。
(3)课程信息管理模块:包括课程信息的添加、查询、修改和删除等功能。
(4)成绩管理模块:包括成绩的录入和查询功能。
(5)课程表模块:根据学生选课情况生成学生的课程表。
三、系统实现1.开发环境系统开发环境选择C语言,编译器使用GCC,开发工具使用Dev-C++。
2.数据存储系统的数据存储采用文本文件的形式,每个学生、教师和课程信息分别存储在一个文本文件中,使用逗号分隔各个字段。
3.界面设计系统界面使用命令行界面,通过菜单来提供各个功能的选项,用户可以根据提示输入相应的指令进行操作。
4.功能实现(1)学生信息管理功能:用户输入学生信息后,系统将学生信息保存到指定的文本文件中,并返回操作结果。
(2)教师信息管理功能:用户输入教师信息后,系统将教师信息保存到指定的文本文件中,并返回操作结果。
(3)课程信息管理功能:用户输入课程信息后,系统将课程信息保存到指定的文本文件中,并返回操作结果。
(4)成绩管理功能:用户输入学生学号和对应的课程信息后,系统将成绩保存到指定的文本文件中,并返回操作结果。
C语言 日记管理系统
![C语言 日记管理系统](https://img.taocdn.com/s3/m/06c5d089d4d8d15abe234ed5.png)
printf("\n\n\t\t\t登入成功!");
printf("\n\n\t\t\t按回车键继续。。。");
getche();
return p;
}
else
{
printf("\n\n\t\t\t密码错误!");Sleep(1000);//延时1s
return NULL;
exit(0);
}
d=p->head;
//d移到末结点
for(; d!=p->head ; d=d->next)
{
printf("\n。");
i++;
}
do{
d1=(diary *)malloc(sizeof(diary));
d1->num=i++;
/* 日记管理系统*/
#include<stdio.h>
#include<stdlib.h>//包含malloc、exit、system函数
#include<string.h>
#include<conio.h>//getche()
# include <windows.h>//Sleep函数所在头文件
{
printf("*"); //将密码隐藏,打印出*号
i++;
}
password[i]='\0';
//加密-------------------------------------------------------------
C语言学生信息管理系统实验报告
![C语言学生信息管理系统实验报告](https://img.taocdn.com/s3/m/cbb6d37e326c1eb91a37f111f18583d048640f50.png)
C语言学生信息管理系统实验报告 -C语言学生信息管理系统实验报告一、实验目的本次实验旨在通过C语言编程实现一个简单的学生信息管理系统,以帮助学生更好地理解和掌握C语言的基本语法、数据类型、程序控制结构以及文件操作等知识点。
同时,通过实际操作,提高学生的编程能力和问题解决能力。
二、实验内容1、系统的基本功能:实现学生信息的输入、存储、查询、修改和删除等操作。
2、数据存储方式:使用文件存储学生信息,保证数据的持久性。
3、用户界面:实现一个简单的命令行界面,方便用户进行操作。
三、实验步骤及实现1、打开一个新文件,命名为“student_info.txt”,用于存储学生信息。
2、定义一个结构体,包含学生的基本信息,如学号、姓名、年龄、性别等。
3、编写程序,实现学生信息的输入、存储和输出。
4、编写程序,实现学生信息的查询、修改和删除操作。
5、在命令行界面中,使用scanf函数获取用户输入的指令,并根据指令执行相应的操作。
6、在操作结束后,将结果显示在命令行界面上。
四、实验结果与分析1、学生信息管理系统的基本功能已经实现,可以正常进行学生信息的输入、存储、查询、修改和删除等操作。
2、使用了文件操作函数,可以将学生信息持久化存储,避免了每次运行程序都需要重新输入信息的麻烦。
3、通过实际操作,学生对C语言的基本语法、数据类型、程序控制结构以及文件操作等知识点有了更深入的理解和掌握。
五、实验总结与建议1、在实现学生信息管理系统时,需要注意数据的正确性和完整性,尤其是输入数据时需要做好错误处理。
2、在实现系统功能时,可以进一步优化代码,提高程序的效率和可读性。
3、可以增加更多的功能,如统计学生人数、打印学生信息等,以使系统更加完善。
4、在实际应用中,需要考虑系统的安全性和稳定性,如数据的备份和恢复、系统的异常处理等。
通过本次实验,学生对C语言有了更深入的理解和掌握,同时提高了编程能力和问题解决能力。
建议在今后的实验中,注重理论与实践相结合,提高学生的实际应用能力。
C语言学生管理系统综合实验报告
![C语言学生管理系统综合实验报告](https://img.taocdn.com/s3/m/3de8b28ca0c7aa00b52acfc789eb172ded63998a.png)
C语言学生管理系统综合实验报告##一、实验目的本实验旨在设计和实现一个简单的学生管理系统,使用C语言编写,帮助学生了解C语言常用的数据结构和文件操作,并能够实际应用在实际的学生管理中。
##二、实验内容本实验要求设计一个学生管理系统,能够完成以下功能:1.添加学生信息:包括学号、姓名、性别、年龄等基本信息;2.修改学生信息:根据学号修改学生的基本信息;3.删除学生信息:根据学号删除学生的信息;4.查询学生信息:根据学号或姓名查询学生的信息;5.显示全部学生信息:将所有学生的信息显示出来;6.保存学生信息到文件:将学生的信息保存到文件中;7.从文件读取学生信息:从文件中读取学生的信息。
##三、实验设计###数据结构设计在设计学生管理系统时,我们需要选择合适的数据结构来存储学生的信息。
本实验中,我们选择使用结构体来表示学生的信息,代码如下:```cstruct Studentint id; // 学号char name[20]; // 姓名char gender[5]; // 性别int age; // 年龄};```###功能实现根据实验要求,我们需要实现添加、修改、删除、查询、显示和文件操作等功能。
以下是具体实现的思路:1.添加学生信息:从用户输入获取学生的信息,并将其添加到学生数组中;2.修改学生信息:根据用户输入的学号,在学生数组中找到对应的学生信息,并更新其基本信息;3.删除学生信息:根据用户输入的学号,在学生数组中找到对应的学生信息,并将其删除;4.查询学生信息:根据用户输入的学号或姓名,在学生数组中找到对应的学生信息,并将其显示出来;5.显示全部学生信息:遍历学生数组,将所有学生的信息显示出来;6.保存学生信息到文件:将学生数组中的所有学生信息保存到文件中;7.从文件读取学生信息:从文件中读取学生信息,并将其存储到学生数组中。
##四、实验结果经过实验的设计与实现,我们成功完成了学生管理系统的编写,并进行了测试。
C语言学生管理系统综合实验报告
![C语言学生管理系统综合实验报告](https://img.taocdn.com/s3/m/cb256a23a45177232f60a25c.png)
printf("%-8s",stu[c].sex);
printf("%-16s",stu[c].clas);
printf("%-6d",stu[c].yw);
printf("%-6d",stu[c].sx);
printf("%-4d",stu[c].yy);
printf("\n");
}
printf("----------------------------------------------------------------\n");
}
void cx()
{
int count=0;
char str[10];
printf("\n请输入要查询的学生学号:");
i++;
printf("\t是否继续输入数据(Y.N)");cin>>x;
if(x=='n'||x=='N') break;
}
}
void EditData()
{
int count=0;
char str[10];
printf("\n请输入学生学号:");
cin>>str;
while (count<i)
printf("%-4d",stu[count].yy);
printf("\n");
printf("----------------------------------------------------------------\n");
数据结构(C语言版) 实验报告
![数据结构(C语言版) 实验报告](https://img.taocdn.com/s3/m/2748b8f4a0c7aa00b52acfc789eb172ded639922.png)
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告1:引言1.1 问题描述在本实验中,我们需要设计一个基于C语言的数据结构,用于解决特定问题。
1.2 目的本实验的目的是通过设计和实现数据结构,加深对数据结构和C语言的理解,并应用所学的知识解决实际问题。
1.3 相关工作在这一章节中,我们将介绍与本实验相关的先前工作,并分析其优缺点,为我们的设计提供参考。
2:需求分析2.1 功能需求本节将详细描述所设计的数据结构需要实现的功能。
2.2 性能需求在这一节中,我们将明确数据结构的性能需求,例如时间复杂度和空间复杂度限制。
3:数据结构设计3.1 数据结构定义在这一节中,我们将给出所设计数据结构的定义,并详细说明每个字段的含义和作用。
3.2 数据结构操作在这一节中,我们将详细描述每个数据结构操作的实现。
这些操作包括插入,删除,查找等。
4:算法设计4.1 算法描述在这一节中,我们将给出在实现数据结构过程中使用的算法的详细描述。
我们将分析算法的时间复杂度,并讨论其优缺点。
4.2 算法优化在这一节中,我们将分析并设计优化算法,以提高数据结构的性能。
5:实验结果在这一节中,我们将给出实验结果,并分析实验数据。
我们还将展示实验中所涉及的示例输入和输出。
6:结论在这一节中,我们将总结本实验的设计和实现,并讨论所得实验结果的意义和潜在的改进方向。
7:附录本文档附带以下附件:- 代码实现:包含所设计数据结构的C语言源代码。
- 实验数据文件:包含用于测试数据结构的示例输入和输出文件。
8:法律名词及注释本文档中涉及的法律名词及注释见附件。
C语言课程设计实验报告学生信息管理系统
![C语言课程设计实验报告学生信息管理系统](https://img.taocdn.com/s3/m/714cbf6403020740be1e650e52ea551810a6c985.png)
C语言课程设计实验报告学生信息管理系统目录1. 内容综述 (2)1.1 实验背景 (2)1.2 实验目的 (3)1.3 实验内容 (4)2. 系统设计 (5)2.1 系统需求分析 (5)2.1.1 功能需求 (6)2.1.2 性能需求 (7)2.1.3 界面需求 (7)2.2 系统总体结构 (9)2.3 系统模块设计 (10)2.3.1 数据模块 (10)2.3.2 功能模块 (11)3. 系统实现 (12)3.1 开发环境 (13)3.1.1 编译器 (13)3.1.2 操作系统 (14)3.1.3 开发工具 (16)3.2 关键代码实现 (17)3.2.1 数据结构设计 (17)3.2.2 数据库操作 (18)3.2.3 功能实现 (19)3.3 系统测试 (20)3.3.1 功能测试 (22)3.3.2 性能测试 (22)3.3.3 界面测试 (23)4. 系统运行结果与分析 (25)4.2 功能测试结果 (27)4.3 性能测试结果 (28)4.4 系统分析与评价 (29)5. 总结与展望 (31)5.1 实验总结 (32)5.2 不足与改进 (33)5.3 展望与应用 (34)1. 内容综述本实验报告旨在详细阐述“C语言课程设计实验:学生信息管理系统”的设计与实现过程。
本系统以C语言为基础,采用结构化程序设计方法,旨在培养学生的编程能力和实际项目开发经验。
报告首先介绍了系统的背景和设计目标,随后对系统的主要功能模块进行了详细描述,包括学生信息录入、查询、修改和删除等功能。
此外,报告还对系统设计过程中遇到的技术难点、解决策略以及测试结果进行了分析,最后总结了实验的收获和不足,为后续的改进工作提供了参考。
通过本实验,学生不仅掌握了C语言编程的基本技能,还学会了如何将理论知识应用于实际项目中,提高了软件工程实践能力。
1.1 实验背景随着信息技术的飞速发展,数据管理在各个领域都扮演着越来越重要的角色。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建工程学院计算机与信息科学系实验报告‘夏热’日记删除操作:/* 日记管理系统*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define ESC 27 //退出键#define Enter 13 //回车键#define BackSpace 8/*定义日记结构体*/typedef struct Link1{ char date[10]; //日期格式2009-12-30char title[40]; //标题char content[1000]; //日记内容char keyword[20]; //关键字,可用空格隔开int tag; //用来标记该日记是否满足查阅要求,是为0,否为-1,初始值为0;struct Link1 *nextd;} Diary;/*定义用户结构体*/typedef struct Link2{ char username[25]; //用户名char password[16]; //登录密码Diary *diarys_list; //该用户拥有的日记链表struct Link2 *nextu;} User;/* 函数声明*/int Change_Password(User *U2); /*更改用户密码*/int Create_NewUser(User *U1); /*创建用户链表*/int Delete_Diary(Diary *D); /*删除日记*/int Diary_Operation(User *U2,Diary *D1); /*日记操作*/int Encrypt_Password(char password[]);/* 将登录口令加密*/int Enter_Password(char password[]);/* 获取登录口令*/User *Find_User(User *U1,char username[]);/*查找用户*/Diary *Init_Diary(Diary *D1);/*初始化日记表*/void Initial_Tag(Diary *D1,int tag);User *Init_User(User *U1);/*初始化用户表*/int Input_Choose();int Open_Diary(Diary *D1);Diary *Open_DiaryFile(Diary *D1,char FileName[]);/* 打开并导入日记文件*/int Printf_DiaryList(Diary *D1);/*显示日记列表*/void Print_Menu1(int *choose1);/*进入菜单*/void Print_Menu2(int *choose2);/*进入日记菜单*/void Print_Menu3(int *choose3);/*进入日记查阅菜单*/int Printf_users(User *U1);/*导入用户信息*/int Save_Diary(Diary *D1);/*保存日记*/int Save_Users_info(User *U1);/*保存用户信息*/int Search_Diary(Diary *D1);/*日记查询*/Diary *Filter_word(Diary *D1,char cmpword[],int n);/*按标题、日期、关键字查阅*/ User *User_Login(User *U1);/* 登录个人用户*/int Write_Diary(Diary *D1);/* 写新日记*//* 更改用户密码*/int Change_Password(User *U2){char oldpw[16],newpw1[16],newpw2[16];do{printf("\n\t请输入旧密码:\t");Enter_Password(oldpw); //调用输入密码函数Encrypt_Password(oldpw); //调用对密码加密函数if(strcmp(U2->password,oldpw)!=0) //如果输入的密码与各个用户中的密码不相等printf("\n\t旧密码输入错误!....\n\n");}while(strcmp(U2->password,oldpw)!=0);//一直到输入的密码与用户密码相等的时候才退出循环do{printf("\n\t请输入新密码:\t");Enter_Password(newpw1);printf("\n\t请确认新密码:\t");Enter_Password(newpw2);if(strcmp(newpw1,newpw2)!=0)printf("\n\t密码确认错误!....\n\n");}while(strcmp(newpw1,newpw2)!=0); //到输入的新密码与确认的新密码一样的时候退出循环Encrypt_Password(newpw1); //对新密码进行加密strcpy(U2->password,newpw1); //讲新密码复制给旧密码,就把旧密码覆盖掉了,密码就修改完毕printf("\n\n\t密码修改成功!......");return 1;}/* 创建用户链表*/int Create_NewUser(User *U1){ int flag=0;char password2[16];User *s,*temp;Diary *D2=NULL;D2=Init_Diary(D2);do{s=(User *)malloc(sizeof(User));printf("\n\t请输入用户名:\t");scanf("%s",&s->username);temp=Find_User(U1,s->username);if(temp==NULL){do{printf("\n\t请输入密码:\t");Enter_Password(s->password);printf("\n\t请确认密码:\t");Enter_Password(password2);if(strcmp(s->password,password2)!=0)printf("\n\t密码确认错误!....\n\n");}while(strcmp(s->password,password2)!=0);Encrypt_Password(s->password);s->diarys_list=D2;s->nextu=U1->nextu;U1->nextu=s;flag=0;printf("\n\t用户创建成功!......\n");}else{printf("\n\n\t***对不起**该用户名已存在!!!!\n");printf("\n\t是否继续创建用户:1/0\t");scanf("%d",&flag);}} while(flag);return 1;}/* 删除日记*/int Delete_Diary(Diary *D){Diary *p;p=D->nextd;D->nextd=p->nextd;free(p);printf("\n\t日记删除成功......");return 1;}/* 日记操作*/int Diary_Operation(User *U2,Diary *D1){ char tempch='1';int choose2;char FileName[40];Diary *p=NULL;while(tempch!=ESC){printf("\n\t\t\t欢迎用户---“%s”的到来!......\n\n",U2->username);Print_Menu2(&choose2);switch(choose2){ case 0:return 0;case 1:{Write_Diary(D1);tempch=getch(); //用来每次做完一项指令后按回车之后返回选择操作}break;case 2:{printf("\n\t请输入文件路径及文件名:");scanf("%s",FileName);p=Open_DiaryFile(D1,FileName); //调用该函数返回该文件名里面的内容并赋值给pif(p!=NULL)Open_Diary(p); //如果该文件夹里面不为空,就调用打开日记函数,将文件夹里面的内容打印出来tempch=getch();};break;case 3:{ printf("\n\n\t该用户有以下日记:\n\n");Printf_DiaryList(D1);tempch=getch();}break;case 4: {if(Search_Diary(D1)==1)tempch=getch();}break; //打开帮助文件case 5: {Change_Password(U2);tempch=getch();}break;}}return 1;}/* 将登录口令加密*/int Encrypt_Password(char password[]){ int i=0;while(password[i]!='\0'){if((password[i]>='a'&&password[i]<='z')||(password[i]>='A'&&password[i]<='Z'))//当password[i]为a~z或A~Z时{password[i]=password[i]+4; //将每个字符进行加4,if(password[i]>'Z'&&password[i]<='Z'+4||password[i]>'z')password[i]=password[i]-26;}else if(password[i]>='0'&&password[i]<='9'){ password[i]=password[i]+4;if(password[i]>'9'&&password[i]<='9'+4)password[i]=password[i]-10;}elsepassword[i]=password[i]+4;i++;}return 1;}/* 获取登录口令*/int Enter_Password(char password[]){ char password1[50];int i=0;while((password1[i]=getch())!=Enter) //将手动输入的字符读入password1[i]中,Enter 为终结符{password[i]=password1[i]; //将得到的password1中的数赋给password;password1[i]='*';printf("%c",password1[i]); //打印出出*号,即将密码隐藏只打印出*号i++;}password[i]='\0';rewind(stdin);return 1;}/*查找用户*/User *Find_User(User *U1,char username[]){User *q;q=U1->nextu;while(q!=NULL&&strcmp(q->username,username)!=0)q=q->nextu; //一直循环到q等于NULL或者找到与username一样的用户名的用户if(q!=NULL)return q; //找到就返回该用户elsereturn NULL; //否则就返回NULL}/*初始化日记表*/Diary *Init_Diary(Diary *D1){ D1=(Diary *)malloc(sizeof(Diary)); //为用户D1申请空间D1->nextd=NULL;return D1;}/* 将所有日记记录的标记tag值置为0或-1*/void Initial_Tag(Diary *D1,int tag){Diary *q;q=D1->nextd;while(q!=NULL){q->tag=tag;q=q->nextd;}}/*初始化用户表*/User *Init_User(User *U1){ U1=(User *)malloc(sizeof(User));if(U1!=NULL){ U1->nextu=NULL;return U1;}elsereturn NULL;}/* 打开日记*/int Open_Diary(Diary *D1){printf("\n\t--------------------------------------------------\n");printf("\n\t日记日期==>%s",D1->date);printf("\n\t日记标题==>%s",D1->title);printf("\n\n\t关键字==>%s",D1->keyword);printf("\n\t--------------------------------------------------\n");printf("\n\n\t日记正文如下:\n");printf("\n\t%s",D1->content);return 1;}/* 打开并导入日记文件*/Diary *Open_DiaryFile(Diary *D1,char FileName[]){FILE *fp;Diary *p=NULL;if((fp=fopen(FileName,"r"))==NULL) //将文件名为FileName的文件赋给文件名fp并打开{printf("\t文件打开失败!");return NULL;}else{p=(Diary *)malloc(sizeof(Diary));fscanf(fp,"\t日期: %s\n",p->date); //将文件fp中的内容赋给pfscanf(fp,"\t标题: %s\n",p->title);fscanf(fp,"\t关键字: %s\n",p->keyword);fscanf(fp,"\t正文如下:\n\t%s\n",p->content);p->tag=0;p->nextd=D1->nextd; //将p接到D1后面,后插法D1->nextd=p;fclose(fp); //对于文件的操作,最后都要对打开的文件进行关闭操作return p; //返回p}}/*导入用户信息*/int Open_Users_info(User *U1){FILE *fp;User *U2=NULL,*U3=NULL;Diary *D1=NULL,*D2=NULL;char filepn[20],tempstr[80];/*用来存放文件保存路径以及文件名,tempstr是用来保存文件的保存路径*/strcpy(filepn,"Users_info.txt");//只是为了省去写文件名的麻烦而用filepn来替换Users_info.txtif((fp=fopen(filepn,"r"))==NULL){printf("不能打开文件!\n");return 0;}else{ fscanf(fp,"%s\n",tempstr); //将文件fp写入字符型tempstr中,这样才可以分别与字符串“User”和"Diary"进行复制while(strcmp(tempstr,"User:")==0&&(!feof(fp)))//循环用来一条一条的读出文件中的每一个用户以及用户的信息{U2=(User *)malloc(sizeof(User));//申请一个空间用来存放每一条的用户信息fscanf(fp,"用户名:%80s\n",U2->username);//将文件中的每一个用户名写到U2->username中fscanf(fp,"密码:%80s\n",U2->password);fscanf(fp,"%80s",tempstr);D1=(Diary *)malloc(sizeof(Diary));D1=Init_Diary(D1);U2->diarys_list=D1;while(strcmp(tempstr,"Diary:")==0&&(!feof(fp)))//将属于该用户的日记信息一条一条的全部读出{D2=(Diary *)malloc(sizeof(Diary));fscanf(fp,"\t日期: %s\n",D2->date);fscanf(fp,"\t关键字: %s\n",D2->keyword);fscanf(fp,"\t标题: %s\n",D2->title);fscanf(fp,"\t日记内容: \n%s\n\n",D2->content);fscanf(fp,"%s\n",tempstr);D2->tag=0;D2->nextd=D1->nextd;D1->nextd=D2;//D2->nextd=NULL; //由前往后进行导入//D1->nextd=D2;//D1=D1->nextd;}U2->nextu=U1->nextu;U1->nextu=U2;//跟上面的插入方法是一样的}fscanf(fp,"\n\n");}fclose(fp);return 0;}/*显示日记列表*/int Printf_DiaryList(Diary *D1){ int count=0;Diary *D;D=D1;printf("\n");if(D->nextd==NULL)printf("\t没有日记信息!.....\n");else{ while(D->nextd!=NULL){ D=D->nextd;if(D->tag==0){count++;printf("\t第%2d篇==>时间:%-10s 日记标题:%-20s \t关键字:%-s\n",count,D->date,D->title);printf("\t关键字:%-s\n",D->keyword);}}}return count;}/*进入菜单并选择操作*/void Print_Menu1(int *choose1){printf("\n\t\t “日记管理系统”---(ESC退出)\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t| 1.用户登录 2.新建用户 3.显示用户列表|\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");do {printf("\n\t请选择操作:\t");scanf("%d",choose1);}while(*choose1<0||*choose1>3);rewind(stdin); /*清空键盘缓冲区里的无用字符*/}/*进入日记菜单并选择操作*/void Print_Menu2(int *choose2){printf("\n\t\t\t “日记操作”---------(ESC返回上级)\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t| 1.写日记 2.导入日记 3.查阅与删除 4.更改用户密码|\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");do {printf("\n\t请选择操作:\t");scanf("%d",choose2);}while(*choose2<0||*choose2>5);rewind(stdin); /*清空键盘缓冲区里的无用字符*/}/*进入日记查阅菜单*/void Print_Menu3(int *choose3){printf("\n\t\t “日记查阅与删除”-----(ESC返回上级)\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^|\n");printf("\t| 1.日记列表 2.按标题查阅 3.按日期查阅 4.按关键字查阅|\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^|\n");do {printf("\n\t请选择操作:\t");scanf("%d",choose3);}while(*choose3<0||*choose3>5);rewind(stdin); /*清空键盘缓冲区里的无用字符*/}/* 显示用户列表*/int Printf_users(User *U1){ int count=0;User *p;p=U1;printf("\n\n\t用户信息列表如下:\n\n");if(U1->nextu==NULL)printf("\n\t没有用户信息!.....\n");else{ while(p->nextu!=NULL){ p=p->nextu;count++;printf("\t第%d个用户==>用户名:%s\n",count,p->username);}}return 1;}/* 日记保存*/int Save_Diary(Diary *D1){FILE *fp;char FileName[40],postfix[6]=".txt\0";printf("\t请输入文件路径及文件名:");scanf("%s",FileName);if((fp=fopen(FileName,"w+"))==NULL){printf("\t打开文件失败!");return 0;}fprintf(fp,"\t日期: %s\n",D1->date);fprintf(fp,"\t标题: %s\n",D1->title);fprintf(fp,"\t关键字: %s\n",D1->keyword);fprintf(fp,"\t正文如下:\n\t%s\n",D1->content);fclose(fp);printf("\t日记文件保存成功!");return 1;}/* 保存用户信息*/int Save_Users_info(User *U1){FILE *fp;Diary *D1;int temp;char filepn[20];/*用来存放文件保存路径以及文件名*/printf("\n\n\t--------------------------------------------------\n");printf("\t是否保存本次使用所做的所有操作?...\t1-是0--否\t");printf("\n\t--------------------------------------------------\n\t");printf("请选择操作:\t");scanf("%d",&temp);if(temp==1){strcpy(filepn,"Users_info.txt");if((fp=fopen(filepn,"w+"))==NULL){printf("不能打开文件!\n");return 0;}while(U1->nextu!=NULL){ fprintf(fp,"User:\n");U1=U1->nextu;/*下移一个结点*/fprintf(fp,"用户名:%s\n密码:%s\n",U1->username,U1->password);D1=U1->diarys_list;while(D1->nextd!=NULL){D1=D1->nextd;fprintf(fp,"Diary:\n");fprintf(fp,"\t日期:%s\n\t关键字: %s\n",D1->date,D1->keyword);fprintf(fp,"\t标题:%s\n",D1->title);fprintf(fp,"\t日记内容:\n%s\n",D1->content);}}fclose(fp);}return 0;}/* 日记查阅*/int Search_Diary(Diary *D1){ char tempch='1';char cmpword[20];int choose3;Diary *p;while(tempch!=ESC){Print_Menu3(&choose3);p=D1;if(p->nextd==NULL)printf("\n\t没有日记......\n");else{switch(choose3){ case 0: return 0;case 1:{ printf("\n\t该用户有以下日记:\n\n");Printf_DiaryList(D1);}break;case 2:Search_order(D1);break;case 3:{printf("\n\t请输入要查阅的日记标题:\t");scanf("%s",cmpword);Filter_word(D1,cmpword,1);}break; //按标题查阅case 4:{ printf("\n\t请输入要查阅的日记日期(2009-4-11):\t");scanf("%s",cmpword);Filter_word(D1,cmpword,2);} break; //按日期查阅case 5:{ printf("\n\t请输入要查阅的关键字(如:想你):\t");scanf("%s",cmpword);Filter_word(D1,cmpword,3);}break; //按关键字查阅}}Initial_Tag(D1,0);tempch=getch();rewind(stdin); /*清空键盘缓冲区里的无用字符*/}return 1;}/*按标题、日期、关键字查阅*/Diary *Filter_word(Diary *D1,char cmpword[],int n) //采用的是筛选算法{ char *temp=NULL;Diary *D,*D2;Initial_Tag(D1,0); //将每一篇日记都编辑成可查找状态D=D1;while(D->nextd!=NULL) //对没有都进行比较{ if(n==1)temp=strstr(D->nextd->title,cmpword); //strstr函数是对D->nextd->title 和cmpword进行模糊比较,并将找到的赋给指针tempelse if(n==2)temp=strstr(D->nextd->date,cmpword);else if(n==3)temp=strstr(D->nextd->keyword,cmpword);if(temp==NULL) //如果找不到相似的标题,日期,关键字,就将日记编辑成不可查找状态D->nextd->tag=-1;D=D->nextd; //比较下一个}printf("\n\n\t有以下的日记符合查阅要求:\n");D2=Search_order(D1);Initial_Tag(D1,0);return D1;}/* 登录个人用户*/User *User_Login(User *U1) //登录成功返回改用户的日记链表指针{int i=0,temp;User *s=NULL,*tempU=NULL;printf("\n\t--------------------------------------------------\n");printf("\t是否要显示用户列表?\t1-是ESC--否\t");printf("\n\t--------------------------------------------------\n\t");scanf("%d",&temp);if(temp==1)Printf_users(U1);s=Init_User(s);tempU=Init_User(tempU);printf("\t请输入用户名:\t");scanf("%s",&s->username);tempU=Find_User(U1,s->username);if(tempU==NULL){printf("\n\t该用户不存在!......\n");getch();}else{printf("\t请输入密码:\t");rewind(stdin);Enter_Password(s->password);Encrypt_Password(s->password);if(strcmp(tempU->password,s->password)==0)return tempU;elseprintf("\n\t密码错误!.....\n\n");getch();}return NULL;}/* 写新的日记*/int Write_Diary(Diary *D1){ int temp;Diary *p=NULL;p=Init_Diary(p);p=(Diary *)malloc(sizeof(Diary));printf("\n\n\t请输入日期(2008-12-31):\t");scanf("%s",&p->date);printf("\n\t请输入标题:\t");scanf("%s",&p->title);printf("\n\t请开始写日记:......\n\n\t");scanf("%s",&p->content);printf("\n\t请为该日记写关键字:\t");scanf("%s",&p->keyword);p->tag=0;p->nextd=D1->nextd;D1->nextd=p;printf("\n\t--------------------------------------------------\n");printf("\t是否要以文件方式保存日记?\t1-是0--否\t");printf("\n\t--------------------------------------------------\n\t");scanf("%d",&temp);if(temp==1)Save_Diary(p);return 1;}int main(){ User *U1=NULL;User *U2=NULL;Diary *D1=NULL;int choose1;char tempch='1',FileName[20];U1=Init_User(U1);D1=Init_Diary(D1);Open_Users_info(U1);while(tempch!=ESC){Print_Menu1(&choose1); //输出菜单,并输入choose的值switch(choose1){case 1:{U2=User_Login(U1);if(U2!=NULL){Diary_Operation(U2,D1);tempch=getch();}}break;case 2: { Create_NewUser(U1);tempch=getch();}break;case 3: { Printf_users(U1);tempch=getch();}break;}}Save_Users_info(U1);system("PAUSE");return 1;}。