文件管理系统源代码

合集下载

知识库管理系统php源代码

知识库管理系统php源代码

知识库管理系统php源代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>#include<time.h> /*所使用的头文件*/typedef struct /*时间结构体定义*/{int hour;int minute;}TIME;typedef struct worker /*结构体定义*/{char id[10];char name[10];TIME time[20];struct worker *next;}worker;int menu_select(); /*主菜单*/void welcome(); /*欢迎界面*/void createInfo(); /*新建职工信息*/void createRec(); /*录入考勤信息*/void listRec(); /*浏览当天考勤信息*/ void searchRec(); /*/查询考勤信息*/void saveRec(); /*保存所有信息*/void deleteRec(); /*删除考勤信息*/void modifyRec(); /*修改考勤信息*/void loadRec(); /*加载文件信息*/void resetPassword(); /*重设密码*/int fun(); /*判断输入选择是否正确*/worker *head=NULL; /*链表头指针head*/writeinfo_flag=0; /*信息保存标记*/char password[16]="888888"; /*初始密码*/struct tm *timeinfo;int main() /*主函数*/{char s[16];welcome(); /*欢迎界面*/loadRec(); /*加载文件信息*/printf("\n提示:\n\n"); /*进入系统密码管理*/printf("\t\t\t\n\n\n\n\n请输入密码,进去系统(密码不超过15个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n密码错误,请重新输入:");scanf("%s",s);}system("cls");for(;;) /*菜单循环*/{switch(menu_select()){case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");listRec();break;case 3:system("cls");searchRec();break;case 4:system("cls");deleteRec();break;case 5:system("cls");modifyRec();break;case 6:system("cls");saveRec();break;case 7:system("cls");resetPassword();break;case 8:system("cls");if(writeinfo_flag==1)saveRec();return 0; default:{printf("\n 选择错误,请按回车键返回后,重新输入(0~8)!"); getchar();getchar();system("cls");break;}}}return 0;}/*选择菜单*/int menu_select(){worker *p=head;int c,k;time_t nowtime;time( &nowtime );timeinfo = localtime( &nowtime );printf("\t\t**************选择菜单**************\t");/*在菜单中显示当前时间*/if(timeinfo->tm_wday==0){printf("时间:星期天");printf(" %d:%d",timeinfo->tm_hour,timeinfo->tm_min);}elseprintf("时间:星期%d %d:%d",timeinfo->tm_wday,timeinfo->tm_hour,timeinfo->tm_min);printf("\n---------------------------------------------------------------------------");printf("\t\t\t0.新建职工信息\n");printf("\t\t1.录入考勤信息\n");printf("\t\t2.浏览考勤信息\n");printf("\t\t3.查询考勤信息\n");printf("\t\t4.删除考勤信息\n");printf("\t\t5.修改考勤信息\n");printf("\t\t6.保存所有信息\n");printf("\t\t7.重设密码\n");printf("\t\t8.退出(退出后信息会自动保存在磁盘中)\n\t\t(任何情况下按Ctrl+C退出程序)\n");printf("\n---------------------------------------------------------------------------");printf("\n\n 请输入您的选择(0~8):");scanf("%d",&c);if(timeinfo->tm_wday==0&&p!=NULL) /*每周周日所有考勤信息初始化*/ {for(k=0;k<20;k++){p->time[k].hour=88;p->time[k].minute=88;}}return c;}void loadRec() /*从磁盘导入信息*/{worker *rear,*p,*pre;FILE *fp,*key;int i,pos=0;key=fopen("key.txt","r");if(key!=NULL){fscanf(key,"%s",password);fclose(key);}fp=fopen("workerRec.txt","r");if(fp!=NULL){fseek(fp, 0, SEEK_END); /*指针移到文件末尾*/pos= ftell(fp);}if(fp==NULL||0 == pos) /*打开职工信息文件和密码文件*/{printf("\n\n\n\n\n\n\t\t提示:\n\n\t\t数据库中没有职工信息,文本为空或文件不存在!\n");printf("\n\t\t请按回车键进入主菜单新建职工信息^_^\n");getchar();system("cls"); /*清屏*/return;}fseek(fp, 0, SEEK_SET); /*指针移到文件开头*/while(!feof(fp)) /*fp不指向文件末尾*/{p=(worker*)malloc(sizeof(worker)); /*开辟一个新单元*/fscanf(fp,"%s%s",p->id,p->name);for(i=0;i<20;i++)fscanf(fp,"%d%d",&p->time[i].hour,&p->time[i].minute);if(head==NULL){head=p;pre=p;rear=p;}else{rear->next=p;pre=rear;rear=p;}}pre->next=NULL;fclose(fp); /*关闭文件*/ return;}。

Linux 内核2.4版源代码分析大全

Linux 内核2.4版源代码分析大全
4.4.3 启用设备文件系统
4.4.4 如何使传统管理方式依然有效
4.4.5 内核实现综述
4.4.6 核心结构与变量
4.4.7 devfs节点注册函数
4.4.8 编写采用devfs的设备驱动程序
4,5 块设备的请求队列
4.5.1 相关结构及请求队列的初始化
4.6.1 构造ioctl命令字
4.6.2 ioctl的实现过程
4.6.3 ioctl的上层处理函数
4.6.4 ioctl的底层处理函数
4.7 I/O端口的资源分配与操作
4.7.1 I/O端口概述
4.7.2 Linux系统中的I/O空间分配
4.7.3 端口操作函数
4.9.4 设备的使用
4.9.5 驱动程序编写实例
4.10 块设备驱动程序的实现
4.10.1 设备功能
4.10.2 编写块设备的函数接口fops
4.10.3 设备接口注册与初始化
第5章 Linux系统初始化
5.1 系统引导
1,13 系统调用
1.13.1 与系统调用有关的数据结构和
函数
1.13.2 进程的系统调用命令是如何转换为
INT0x80中断请求的
1.13.3 系统调用功能模块的初始化
1.13.4 Linux内部是如何分别为各种系统
调用服务的
4.1.2 与外设的数据交流方
4.1.3 字符设备与块设备
4.1.4 主设备号和次设备号
4.1.5 本章内容分配
4.2 设备文件
4.2.1 基本设备文件的设备访问流程
4.2.2 设备驱动程序接口
4.2.3 块设备文件接口

图书馆管理系统文档(含源代码)免费

图书馆管理系统文档(含源代码)免费

程序设计综合训练<图书馆管理系统>设计报告院系:材料科学与工程学院专业班级:材料成型一班*名:***学号: ***********指导老师:肖老师一、程序功能简介图书排序功能1)按图书编号排序可以按图书编号的大小排序,显示到屏幕上。

(从小到大)2)按图书出版时间排序可以按图书出版时间的前后排序,显示到屏幕上。

(从近到远)3)按图书价格排序可以按图书价格的贵宜排序,显示到屏幕上。

(从便宜到贵)4)按图书书名排序可以按图书书名字符的大小排序,显示到屏幕上。

(从小到大)5)按图书作者名排序可以按图书作者名字符的大小排序,显示到屏幕上。

(从小到大)二、本人完成的主要工作图书排序功能(排序比较简单只要做出来一个,其他都和它雷同。

)三、设计方案1.设计分析;1)序功能简介:s2)各个功能流程图1、按图书编号排序2、按图书出版时间排序3、按图书价格排序4、按图书书名排序5、按图书作者名排序2. 操作方法简介; 1)主面板输入密码9进入系统。

输入排序的功能序号5是 输入y/n 进,输入n 的话返回到主菜单Y/n是(y)显示排序否(n )按Enter2)主菜单按4进入排序功能。

2)排序功能目录3)选择功能(比如3)按价格的大小排序3.实验结果(包括输入数据和输出结果)四、设计体会在期末课程设计中,我们所选择的是设计一个图书管理系统,这对我们来说是一次尝试与创新的过程,也可以说是一个挑战的过程,毕竟以前没有作过,缺少经验。

现在利用自己学到的知识设计并制作一个图书管理系统,这本身就是一个知识转化为生产力的过程,所以大家都很兴奋,不同程度的投入了很高的热情与努力。

在具体的设计与实施中,我们看到并感受到了一个管理系统从无到有的过程,对具体的设计步骤、思路、方法、技巧都有了进一步的了解,并感受深刻。

在设计中我们基本能按照规范的方法和步骤进行,首先对现有的系统进行调查,并查阅有关资料,最后确定设计方案,然后设计并制作,实施过程中我们深刻的认识到认真执行管理系统软件标准的重要性,我们由于对管理系统软件相关的标准和规范不太了解,缺少行为操作准则,所以在设计中手法比较生硬,主与次也没能很好把握住,这些方面通过这次我们都要加强了解。

源代码管理规范

源代码管理规范

1 源代码管理 (2)1.1 总那末 (2)1.2 源代码完整性保障 (2)1.3 源代码的授权访问 (3)1.4 代码版本管理 (3)1.5 源代码复制和传播 (5)1.6 系统测试验收流程 (6)系统初验 (6)试运行 (6)系统终验 (7)应用系统验收标准 (9)文档评审通过标准 (9)确认测试通过标准 (10)系统试运行通过标准 (10)1、为保障公司源代码和开辟文档安全不至于泄露,保证源代码的完整,明确源代码控制管理流程,特制定此管理方法。

2、本方法合用于所有涉及接触源代码的各部门各岗位。

所涉及部门都必须严格执行本管理方法。

3、源代码直接控制管理部门为技术开辟部。

4、本方法管理重点在于控制管理源代码的完整性,不被非授权获取,不被非授权复制和传播。

5、本方法所指源代码不仅限于公司开辟人员自行编写实现功能的程序代码,而且还包括相应的开辟设计文档及用于支撑整个系统运行所必须具备的第三方软件、控件和其它支撑库等文件。

1、所有软件的源代码文件及相应的开辟设计文档均必须及时参加到指定的源代码效劳器中的指定库中。

2、我们研发的产品软件运行所必须的第三方软件、控件和其它支撑库等文件也必须及时参加源代码效劳器中指定的库中。

3、软件开始编写或者调整代码之前,其相应的设计文档和代码必须先从相应的 SVN 库进行SVNUpdate 操作。

软件编码或者功能调整结束测试正确无误后,相应的源代码必须进行 SVNCommit 操作,在最终进行 SVNCommit 操作之前需要再进行 SVNUpdate 操作,查看是否有冲突产生,如果有冲突产生需要和冲突相关人一并解决冲突。

1、源代码效劳器对于共享的 SVN 库的访问建立操作系统级的,基于身份和口令的访问授权。

第十条在 SVN 库中设置用户,并为不同用户分配不同的,适合工作的最小访问权限。

要求连接 SVN 库时必须校验 SVN 中用户身份及其口令。

在SVN 库中要求区别对待不同用户的可访问权、可读权、可写权。

linux实训报告总结

linux实训报告总结

linux实训报告总结Linux是一种开放源代码的操作系统,它可以在各种计算机硬件设备和移动设备上运行。

Linux是以Unix为基础的操作系统,其内核是由Linus Torvalds于1991年创建的。

Linux以其稳定性、可靠性、安全性、免费和自由等优点受到了广泛的欢迎和应用。

本文将介绍Linux实训的相关内容,包括Linux的基础概念、Linux系统下的文件管理、安装软件、网络设置、权限管理等内容。

同时还将讲述在实际Linux应用场景中我们所遇到的问题和解决方案。

一、Linux的基础概念本次实训,我们首先学习了Linux的基础概念。

Linux的文件系统和Windows有很大的不同,因此我们需要了解Linux的目录结构,包括usr、etc、var等目录下存放的文件和文件夹以及它们的作用。

随后我们学习了如何使用命令行终端,包括常用的命令,如ls、cd、mkdir、rm、cp等。

这些命令是Linux系统管理和操作的基础。

二、Linux系统下的文件管理Linux系统中不仅有命令行终端管理文件,还有图形化界面管理文件。

我们学习了如何创建文件夹、复制、剪切和重命名文件等。

另外,我们还学习了如何查看文件的属性和权限。

这些技能对于系统管理和操作都非常有帮助。

三、安装软件Linux系统中有很多软件可以使用,包括开源软件和商业软件。

我们学习了使用命令行终端和软件包管理器来安装和卸载软件,如yum、rpm等。

同时还学习了从源代码编译安装软件的方法。

四、网络设置在Linux系统中,通过命令行终端可以进行网络设置。

我们学习了如何配置网络接口以及如何进行本地ping和远程ping其他主机。

五、权限管理在Linux系统中,有严格的文件和目录的访问控制机制。

我们学习了如何使用命令行终端进行用户和组的管理,如添加、删除用户或组,并设置各种权限。

这对于系统管理员来说是非常重要的技能。

总结:Linux在各个领域都得到了广泛的应用,这次实训让我们更加深入地了解了Linux操作系统及其特点,掌握了基础的命令行终端和图形界面操作技能,掌握了安装软件和进行网络设置的方法以及权限管理。

Linux系统文件和目录管理

Linux系统文件和目录管理

选项参数: -num:在匹配行找到后,将显示匹配行和匹配行前后num行的内容。 -A num:在匹配行找到后,将显示匹配行和匹配行后num行的内容。 -B num:在匹配行找到后,将显示匹配行和匹配行前num行的内容。 -n:在找到匹配的输出行前面加上该行在输入文件中的行数。 -s:对于不存在或者不可读的文件不输出错误信息。 文件列表:所要查询的文件和文件列表。 例:在tty.txt文件中查找每一个提到“Linux*b”的地方。
$ grep Linux\*b tty.txt
1.4 操作文件和目录
1. cp命令 功能:cp(copy)命令可以将文件或目录复制到其他目录中,就如
同DOS下的copy命令一样,功能非常强大。在使用cp命令时,需要 指定源文件名与目标文件名或目标目录即可。 格式:cp[选项]源文件 目标文件 选项参数: -f:在复制过程中删除已经存在的目标文件。 -i:在复制过程中删除已经存在的目标文件时给出提示信息。 -r:递归复制所有目录,将所有的非目录内容当作文件一样复制。 -u:源文件比目标文件新或目标文件不存在则复制。 -R:递归复制整个目录。
例1:输出当前目录下名称中有“lib”文件或目录的详细信息。
# ls –l *lib* 显示结果为 drwxr-xr-x 130 root root 69632 3月 10 14:07
lib drwxr-xr-x 13 root root 4096 3月 4 20:28
libexec 这个结果提供了许多细节信息。 1)第一列为文件模式。文件模式中第一位代表文件类型,其余九位
$ cat /etc/redhat-release
1.3 搜索文件内容
搜索文件内容可以使用grep命令 功能:grep命令用于在文件中查找指定的字串。 格式:grep[选项]文件列表 说明:grep除了可以查找固定的字符串,还可以使用较为复杂的匹

北邮操作系统进程管理实验报告及源代码

北邮操作系统进程管理实验报告及源代码

进程管理实验报告1. 实验目的:(1)加深对进程概念的理解, 明确进程和程序的区别;(2)进一步认识并发执行的实质;(3)分析进程争用资源的现象, 学习解决进程互斥的方法;(4)了解Linux系统中进程通信的基本原理。

2. 实验预备内容(1)阅读Linux的sched.h源码文件, 加深对进程管理概念的理解;(2)阅读Linux的fork()源码文件, 分析进程的创建过程。

3.环境说明本次实验使用的是win7下的VMWare workstation虚拟机, 安装了ubuntu系统在ubuntu系统下使用code::blocks IDE编写代码并执行程序的4.实验内容:1.进程的创建:(1)实验题目和要求:编写一段程序, 使用系统调用fork() 创建两个子进程。

当此程序运行时, 在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示字符“a”, 子进程分别显示字符“b”和“c”。

试观察记录屏幕上的显示结果, 并分析原因。

(2)程序设计说明:参照书上的例子进行设计, 详见源代码(3)程序运行结果截图:(4)程序分析:a,b,c随机出现, 因为父进程与两个子进程之间并没有同步措施, 所以a,b,c随机打印出来, 也就是三个进程的活动次序是随机进行的, 不同的系统可能有不同的进程调度方式。

(5)源程序:#include<sys/types.h>#include<stdio.h>#include<unistd.h>int main(){pid_t pid1,pid2;if((pid1=fork())<0){printf("Fork Failed.\n");exit(-1);}else if((pid1=fork())==0)printf("b\n");else{if((pid2=fork())<0){printf("Fork Failed.\n");exit(-1);}else if((pid2=fork())==0)printf("c\n");else{wait(NULL);printf("a\n");exit(0);}}return 0;}2.进程的控制:要求一:(1)实验题目和要求:修改已经编写的程序, 将每个进程输出一个字符改为每个进程输出一句话, 再观察程序执行时屏幕上出现的现象, 并分析原因。

源代码管理工具-SVN使用手册大全(客户端)

源代码管理工具-SVN使用手册大全(客户端)

目录1.SVN客户端使用说明 (1)1.1.安装SVN客户端 (1)1.2.迁出配置库内容 (1)1.3.维护工作文件 (3)1.3.1.增加文件 (3)1.3.2.更新文件 (7)1.3.3.删除文件 (8)1.3.4.修改文件 (8)1.3.5.比较版本差异 (9)1.3.6.撤销更改 (12)1.3.7.锁定和解锁 (12)1.3.8.重命名文件 (12)1.3.9.获取历史文件 (13)1.3.10.检查冲突 (13)1.3.11.解决冲突 (14)1.3.12.忽略无需版本控制的文件 (15)1.3.13.去除SVN标志 (15)1.3.14.查看文件每行的修改信息 (16)1.3.15.重置访问路径 (17)1.3.16.本地路径转换 (17)1.4.浏览版本库 (17)1.5.建立标签 (17)1.6.建立分支 (17)1.7.清除用户名等信息 (18)1.8.统计信息 (19)1.9.SVN数据同步 (22)2.VISUAL STUDIO集成SVN (23)2.1.安装V ISUAL SVN (23)1. SVN客户端使用说明1.1. 安装SVN客户端安装SVN客户端(TortoiseSVN-1.8.7.25475-x64-svn-1.8.9.msi):双击安装包→Next→选中“I accept the terms in the license Agreement”→Next→Install→选中“Show Changelog”→Finish→点击“Yes”按钮重新启动电脑。

SVN客户端的存放位置为:注意:安装SVN客户端后需重启电脑,否则SVN客户端无法正常使用。

可以下载TortoiseSVN的中文语言包,根据向导运行语言包安装程序,重新启动程序后,即可看到中文菜单。

所有的TortoiseSVN命令都是通过windows资源管理器的右键菜单执行。

1.2. 迁出配置库内容1、在本地硬盘上建立一个文件夹“SVN”,并在文件夹“SVN”中建立一个子文件夹(子文件夹为空文件夹),子文件夹的名称可以根据本公司配置库路径下的对应文件夹名称进行定义。

徐家乐1521030实验三Linux文件系统及文件管理

徐家乐1521030实验三Linux文件系统及文件管理

徐家乐1521030实验三Linux⽂件系统及⽂件管理实验三1 实验名称:Linux⽂件系统及⽂件管理2 实验⽬的通过本实验了解Linux操作系统⽀持的多⽂件系统,并熟练掌握Linux⽂件管理⽅法,使实验者具备初步的Linux操作系统⽂件管理能⼒,包括:2.1 掌握磁盘管理能⼒2.2 掌握⽬录与⽂件管理能⼒2.3 掌握⽂件归档与压缩能⼒2.4 掌握RPM软件包管理能⼒3 实验环境3.1Windows XP下基于“VMware Workstation”虚拟机环境的Red Hat Enterprise Linux Server 5系统。

3.2将主机改为具有个⼈学号后3位特征的名称。

4实验要求、步骤及结果4.1掌握与磁盘管理相关的shell命令的使⽤。

【操作要求1】查看系统已挂载⽂件系统信息;截取/dev下某⼀挂载设备(/dev/sda2)的具体信息,解释其含义。

查看该挂载点(/)的详细信息;访问该挂载点(/);查看该挂载点(/)上⽂件的详细信息;返回个⼈⽤户主⽬录。

【操作步骤1-查看挂载信息】【截取挂载相关信息及注解】【操作步骤2-查看挂载点】【操作步骤3-访问】【操作步骤4-查看⽂件】【操作要求3】分页查看/etc⽬录中⽂件信息;将/etc⽬录中fstab⽂件复制到当前⽬录下;显⽰fstab 的内容;显⽰fstab的访问权限;增加同组⽤户对fstab⽂件写的权限。

【操作步骤1-查看/ect】【操作步骤2-复制⽂件】【操作步骤3-显⽰⽂件内容】【操作步骤4-显⽰⽂件权限】【截取访问权限-字母表⽰】【转换访问权限-数字表⽰】664【操作步骤5-修改⽂件权限】【截取访问权限-字母表⽰】【转换访问权限-数字表⽰】6644.2掌握⽬录与⽂件管理相关的shell命令的使⽤。

【操作要求1】⽤⼀条命令新建具有如下结构的⽬录树。

注意:⽂件名严格区分⼤⼩写。

【操作要求1】【操作要求2】将M2⽬录重命名为m2;查看m1⽬录的访问权限;减去其它⽤户对m1⽬录的执⾏权。

20个python3大项目开发源代码(附源码)

20个python3大项目开发源代码(附源码)

在此文中,我们将为您介绍20个Python3大型项目开发的源代码,以帮助您了解Python3的应用和实际项目开发。

以下是这20个Python3大型项目开发源代码的详细内容:1. 人脸识别系统- 该项目使用Python3编写,利用OpenCV和Dlib库实现人脸识别功能。

它可以识别图像和视频中的人脸,并进行特征提取和匹配。

2. 文件同步工具- 这个项目使用Python3编写,可以实现不同计算机之间的文件同步。

它可以检测文件的新增、删除和修改,并及时同步到其他设备。

3. 聊天机器人- 该项目利用Python3编写,使用自然语言处理技术和机器学习算法,实现了一个智能聊天机器人。

它可以回答一般性问题,处理用户输入的文本,并给出相应的回复。

4. 数据可视化工具- 这个项目采用Python3编写,利用Matplotlib和Seaborn库实现数据可视化功能。

它可以将数据以图表、图形等形式展现出来,方便用户分析和理解数据。

5. 网络爬虫- 该项目使用Python3编写,利用BeautifulSoup和Requests库实现网络爬虫功能。

它可以抓取网页数据,对数据进行处理和分析,用于各种网页数据的采集和整理。

6. 视频流分析系统- 这个项目利用Python3编写,借助FFmpeg和NumPy库实现对视频流的分析和处理。

它可以提取视频流中的特征,并进行目标识别和跟踪。

7. 在线投票系统- 该项目采用Python3编写,利用Django框架实现在线投票系统。

它可以处理用户投票请求,进行实时统计数据,并生成相应的数据报表。

8. 电流信箱客户端- 这个项目使用Python3编写,利用smtplib和poplib库实现电流信箱客户端功能。

它可以发送、接收和管理电流信箱,支持对邮件进行筛选、归档等操作。

9. 文档管理系统- 该项目利用Python3编写,使用Django框架实现文档管理系统。

它可以上传、下载和管理文档,支持文档的分类、版本管理等功能。

dos 6.0 源代码注解

dos 6.0 源代码注解

dos 6.0 源代码注解全文共四篇示例,供您参考第一篇示例:DOS(Disk Operating System,磁盘操作系统)是早期个人计算机上应用最广泛的操作系统之一,而DOS 6.0则是其发展的一个重要版本。

DOS 6.0自发布之后,便成为当时广泛使用的操作系统之一,该系统不仅在个人计算机,还被广泛应用于商业环境中。

其源代码注解的研究与分析不仅有助于理解计算机操作系统的发展历程,还有利于理解当时计算机行业的技术发展和软件工程的发展过程。

DOS 6.0的源代码注解是一项涉及庞大而复杂的工程,需要对该操作系统的源代码进行深入的研究与分析。

在对DOS 6.0源代码进行注解的过程中,我们可以深入了解DOS 6.0的设计思想、系统架构、关键模块的实现方式等方面的内容,从而更好地把握当时的计算机技术水平与软件工程水平。

通过源代码注解,我们还可以深入了解DOS 6.0的功能特性、性能优化以及错误处理等方面的内容,这些对于理解操作系统的工作原理和设计思想有着重要意义。

在DOS 6.0源代码注解的研究中,我们可以首先从系统的启动过程入手。

DOS 6.0的启动过程主要包括硬件的初始化、引导加载器的加载与执行、内存管理和文件系统的初始化等步骤,通过对这些步骤进行源代码注解,我们可以深入了解DOS 6.0是如何进行系统初始化和加载的。

我们可以进一步研究DOS 6.0的文件系统、进程管理、设备管理等核心功能的实现方式,这些内容对于理解操作系统的核心功能和机制有着重要意义。

在进行DOS 6.0源代码注解的研究中,我们还可以深入了解DOS 6.0的设计思想与实现方式。

DOS 6.0作为一个早期的个人计算机操作系统,其设计思想和实现方式具有一定的特殊性,通过源代码注解,我们可以更好地把握当时计算机操作系统的设计与实现的特点。

通过对DOS 6.0源代码进行注解,我们还可以了解到当时的软件工程技术水平与开发实践,这对于理解当时计算机行业的技术发展过程有着重要意义。

C语言图书管理系统源代码

C语言图书管理系统源代码

#include<stdio。

h〉#include<stdlib.h〉#include〈string。

h〉struct tushu{ /*图书结构体*/ char num[10]; /*编号*/char name[20];/*书名*/char writer[20];/*作者*/char press[20];/*出版社*/char kind[20];/*类别*/double time; /*时间*/double price;/*价格*/struct tushu *next;};struct stu /*学生结构体*/ {int snum;/*学号*/char mima[10]; /*密码*/struct stu *next;};FILE *fp; /*图书文件*/FILE *fp1; /*管理员信息文件*/ FILE *fp2; /*学生信息文件*/void menu();/*管理员主菜单(管理员进入对图书及学生信息进行管理操作)*/void xmenu();/*学生主菜单(学生进入可对图书,密码进行操作)*/void gfind(); /*管理员查询(管理员可按一定的方式查询图书)*/void xfind();/*学生查询(学生可按一定的方式查询图书)*/ void secret();/*管理员权限(管理员登陆所用,输入错误次数过多自动退出)*/void sort();/*排序(管理员可按一定的方式对图书进行排序,排序完之后可选择文件进行保存)*/void fprint(struct tushu *head);/*保存(可追加的保存,如添加可用)*/void fprint_(struct tushu *head);/*保存(可覆盖保存如修改,删除,排序后用)*/void hfprint(struct tushu *head); /*还书保存(还书成功后自动保存到文件)*/void jfprint_(struct tushu *head);/*借书保存(借书成功之后自动从图书馆删除)*/struct tushu * Input(); /*图书添加(可进行图书的添加)*/struct tushu *create(); /*从文件创建链表(从文件中读出信息,建立单链表)*/void gBrowse(struct tushu *head);/*管理员浏览(对图书进行遍历)*/void xBrowse(struct tushu *head);/*学生浏览(学生对图书进行遍历)*/void count(struct tushu *head); /*统计数量(管理员可对图书进行统计)*/void Findofname(struct tushu *head); /*按书名查找*/ void Findofwriter(struct tushu *head); /*按作者查找*/void Findofkind(struct tushu *head); /*按类别查找*/void xFindofname(struct tushu *head);/*学生按书名查找*/void xFindofwriter(struct tushu *head);/*学生按作者查找*/ void xFindofkind(struct tushu *head); /*学生按类别查找*/ void Sort_time(struct tushu * head); /*按时间排序(管理员按时间对图书进行排序,排序完之后可选择文件进行保存)*/ void Sort_price(struct tushu *head); /*按价格排序*/void Sort_num(struct tushu * head);/*按编号排序*/ void Delete(struct tushu * head,char m[15]);/*按编号删除(管理员可按编号删除图书)*/void Revise(struct tushu *head);/*修改(管理员可对图书进行修改,并选择是否保存)*/void borrow(struct tushu *head); /*借书*/void huanshu(); /*还书(学生借完书之后进行还书,若没有图书则不能借)*/void gxinxi(); /*管理员信息(有管理员的账号及密码,可进行修改)*/void xmima(struct stu *head1);/*学生密码修改(学生可对自己的密码进行修改)*/struct stu *xcreate();/*从文件创建学生信息(从文件读出学生信息,建立学生链表)*/void xsecret(struct stu *head1);/*学生权限(学生登陆所用)*/void menu() /*管理员主菜单(管理员进入对图书及学生信息进行管理操作)*/{int choice,n=0;struct tushu *head;struct stu *head1,*p;char m[15];there:printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n"); printf(" ┃┃socat 图书管理系统printf(” ┃┗━━━━━━━━━━━━━━━━━━━┛┃\n"); printf(" ┃●[0]退出系统┃\n");printf(” ┃┃\n”);prin tf(” ┃●[1]帮助┃\n");printf(” ┃┃\n”);printf(” ┃●[2]浏览图书┃\n");printf(” ┃┃\n");printf(” ┃●[3]统计图书数目┃\n”);printf(" ┃┃\n”);printf(” ┃●[4]查询┃\n”);printf(” ┃printf(” ┃●[5]添加┃\n");printf(” ┃┃\n”);printf(” ┃●[6]排序┃\n");printf(” ┃┃\n");printf(" ┃●[7]修改┃\n”);printf(” ┃┃\n");printf(" ┃●[8]删除┃\n”);printf(" ┃┃\n”);printf(" ┃●[9]修改账号及密码┃\n");printf(” ┃┃\n”);printf(” ┃●[10]学生信息printf(”┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf(” 请选择:”);fflush(stdin);head=create();scanf("%d”,&choice);if(choice==1){//help();printf(”没有内容!\n”);system("pause”);system(”cls”);menu();}else if(choice==2){system(”cls");if(head==NULL){printf(”没有图书,请先添加图书!\n”);system("pause");system("cls");menu();}gBrowse(head);}else if(choice==3){system(”cls");count(head);}else if(choice==4){system("cls");if(head==NULL){printf(”没有图书,请先添加图书!\n”);system("pause”);system(”cls”);menu();}gfind();}else if(choice==5){Input();}else if(choice==6){system("cls");if(head==NULL){printf(”没有图书,请先添加图书!\n”); system("pause”);system(”cls”);menu();}sort(head);}else if(choice==7){system("cls”);if(head==NULL){printf(”没有图书,请先添加图书!\n”);system("pause");system("cls”);menu();}Revise(head);}else if(choice==8){if(head==NULL){printf("没有图书,请先添加图书!\n");system(”pause");system(”cls");menu();}printf(" 请输入想要删除的图书编号:”);scanf(”%s",m);Delete(head,m);}else if(choice==9){gxinxi();else if(choice==10){system(”cls”);head1=xcreate();if(head1==NULL){printf("没有学生信息,请到xuesheng_list.txt添加!\n”); sys tem(”pause”);system(”cls”);menu();}for(p=head1;p!=NULL;p=p—>next){printf(”学生学号密码\n”);printf("%d %s\n",p->snum,p—>mima);}system(”pause”);system("cls”);menu();}else if(choice==0)system(”cls");printf(”\n\n\n\n”);printf(” ━━━━━━━━感谢使用图书管理系统━━━━━━━━\n\n\n”);exit(0);}else{system("cls");printf(”\n\n\n\n ━━━━输入错误,请重新输入!━━━━\n\n\n ");system("pause”);system(”cls”);n++;if(n==3){printf(” \n\n\n ━━━━━━━━你错误次数太多,自动退出!━━━━━━━━\n\n\n”);printf(" ━━━━━━━━感谢使用图书管理系统━━━━━━━━\n\n\n");system(”pause");exit(0);}goto there;}}void xmenu()/*学生主菜单(学生进入可对图书,密码进行操作)*/{struct tushu *head;struct stu *head1;int choice,n=0;there:printf(”┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");printf(” ┃┃socat 图书借阅系统┃┃\n");printf(” ┃┗━━━━━━━━━━━━━━━━━━━┛┃\n"); printf(” ┃●[0]退出系统┃\n”);printf(” ┃printf(” ┃●[1]帮助┃\n”);printf(” ┃┃\n”);printf(” ┃●[2]浏览图书┃\n");printf(” ┃┃\n”);printf(" ┃●[3]查询┃\n”);printf(” ┃┃\n”);printf(” ┃●[4]借书┃\n");printf(” ┃┃\n”);printf(" ┃●[5]还书┃\n");printf(" ┃┃\n”);printf(” ┃●[6]修改密码printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n”); printf(" 请选择:");fflush(stdin);head=create();scanf("%d”,&choice);if(choice==1){//xhelp();printf(”没有内容!\n");system(”pa use");system(”cls”);xmenu();}else if(choice==2){system("cls");if(head==NULL){printf(”没有图书!\n");system("pause”);xmenu();}xBrowse(head);}else if(choice==3){if(head==NULL){printf(”没有图书!\n”);system(”pause”);system(”cls”);xmenu();}xfind();}else if(choice==4){if(head==NULL){printf(”没有图书!\n");system(”pause”);xmenu();}borrow(head);}else if(choice==5){huanshu(head);}else if(choice==6){system("cls”);head1=xcreate();if(head1==NULL){printf(”学生信息被清空!!\n”);system("pause");system("cls”);xmenu();}xmima(head1); ;}else if(choice==0){system("cls");printf(”\n\n\n\n”);printf(” ━━━━━━━━感谢使用图书管理系统━━━━━━━━\n\n\n");exit(0);}else{system("cls”);printf("\n\n\n\n ━━━━输入错误,请重新输入!━━━━\n\n\n ”);system(”pause”);system(”cls”);n++;if(n==3){printf(” \n\n\n ━━━━━━━━你错误次数太多,自动退出!━━━━━━━━\n\n\n”);printf(” ━━━━━━━━感谢使用图书管理系统━━━━━━━━\n\n\n”);system("pause”);exit(0);}goto there;}}void gfind()/*管理员查询(管理员可按一定的方式查询图书)*/{int choice,n=0;struct tushu *head;there:system(”cls”);printf(” ┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n”);printf(” ┃┃socat 图书借阅系统┃┃\n”);printf(” ┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");printf(" ┃●[0]返回┃\n");printf(" ┃┃\n”);printf(" ┃●[1]按书名查找┃\n”);printf(" ┃┃\n”);printf(" ┃●[2]按作者查找┃\n”);printf(” ┃┃\n”);printf(" ┃●[3]按类别查找┃\n”);printf(" ┃┃\n”);printf(" ┃● ┃\n”);printf(”┗━━━━━━━━━━━━━━━━━━━━━━━┛\n”);printf(" 请选择:”);fflush(stdin);head=create();scanf(”%d”,&choice);if(choice==1){system(”cls");Findofname(head); }else if(choice==2){system(”cls”); Findofwriter(head); }else if(choice==3){system(”cls");Findofkind(head); }else if(choice==0){system(”cls”);menu();}else{system(”cls”);printf(”\n\n\n\n ━━━━输入错误,请重新输入!━━━━\n\n\n ”);system("pause");system(”cls");n++;if(n==3){printf(" \n\n\n ━━━━━━━━你错误次数太多,自动退出! ━━━━━━━━\n\n\n”);printf(" ━━━━━━━━感谢使用图书管理系统━━━━━━━━\n\n\n”);system(”pause”);exit(0);}goto there;}}void xfind()/*学生查询(学生可按一定的方式查询图书)*/ {struct tushu *head;int choice,n=0;there:system("cls”);printf(” ┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n”);printf(” ┃┃socat 图书借阅系统┃┃\n”);printf(” ┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");printf(” ┃●[0]返回┃\n”);printf(” ┃┃\n");printf(" ┃●[1]按书名查找┃\n”);printf(” ┃┃\n”);printf(" ┃●[2]按作者查找┃\n”);printf(" ┃┃\n");printf(” ┃●[3]按类别查找┃\n");printf(” ┃┃\n”);printf(" ┃● ┃\n");printf(”┗━━━━━━━━━━━━━━━━━━━━━━━┛\n"); printf(” 请选择:");fflush(stdin);head=create();scanf(”%d",&choice);if(choice==1){system(”cls”);xFindofname(head);}else if(choice==2){system(”cls”);xFindofwriter(head);}else if(choice==3){system("cls");xFindofkind(head);}else if(choice==0){system(”cls");xmenu();}else{system("cls");printf("\n\n\n\n ━━━━输入错误,请重新输入!━━━━\n\n\n ”);system(”pause”);system(”cls");n++;if(n==3){printf(” \n\n\n ━━━━━━━━你错误次数太多,自动退出!━━━━━━━━\n\n\n”);printf(” ━━━━━━━━感谢使用图书借阅系统━━━━━━━━\n\n\n”);system("pause”);exit(0);}goto there;}}void sort(){struct tushu *head;int choice,n=0;there:system("cls”);printf(” ┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");printf(” ┃┃socat 图书借阅系统┃┃\n");printf(" ┃┗━━━━━━━━━━━━━━━━━━━┛┃\n”);printf(" ┃●[0]返回┃\n”);printf(” ┃┃\n");printf(” ┃●[1]按时间排序┃\n”);printf(” ┃┃\n”);printf(” ┃●[2]按价格排序┃\n");printf(" ┃┃\n”);printf(” ┃●[3]按编号排序┃\n”);printf(" ┃┃\n”);printf(” ┃●┃\n”);printf(”┗━━━━━━━━━━━━━━━━━━━━━━━┛\n”);printf(" 请选择:”);fflush(stdin);head=create();scanf("%d",&choice);if(choice==1){system("cls”); Sort_time(head);}else if(choice==2){sys tem(”cls");Sort_price(head);}else if(choice==3){system(”cls”);Sort_num(head); }else if(choice==0){system("cls”); menu();}else{system(”cls");printf("\n\n\n\n ━━━━输入错误,请重新输入!━━━━\n\n\n ”);system(”pause”);system(”cls”);n++;if(n==3){printf(” \n\n\n ━━━━━━━━你错误次数太多,自动退出! ━━━━━━━━\n\n\n”);printf(” ━━━━━━━━感谢使用图书借阅系统━━━━━━━━\n\n\n”);system("pause”);exit(0);}goto there;}}struct tushu *Input(){struct tushu *p1,*p2,*head,*ptr;char num;int x,i=0;system("cls”);p1=(struct tushu *)malloc(sizeof(struct tushu));head=p1;p1-〉price=—1;while(i!=1){printf(”请输入编号,以’#’结束\n”);scanf("%s",p1—>num);if(strcmp(p1-〉num,”#")==0)i=1;while(i!=1){printf(”请依次输入书名作者出版社类别出版时间价格\n”); scanf(”%s%s%s%s%lf%lf”,p1—>name,p1—>writer,p1—〉press,p1-〉kind,&p1-〉time,&p1—〉price);p2=p1;p1=(struct tushu *)malloc(sizeof(struct tushu));p2—〉next=p1;break;}}if(p1-〉price!=-1)p2—〉next=NULL;elsehead=NULL;system("cls”);printf("\n\n\n\t\t\t图书信息输入结束!\n\n\n”);system(”pause”);system(”cls”);printf(”\n\n\n\t\t\t是否保存图书信息?(1。

XV6源代码阅读-文件系统

XV6源代码阅读-文件系统

XV6源代码阅读-⽂件系统Exercise1 源代码阅读⽂件系统部分 buf.h fcntl.h stat.h fs.h file.h ide.c bio.c log.c fs.c file.c sysfile.c exec.c1.buf.h:对xv6中磁盘块数据结构进⾏定义,块⼤⼩为512字节。

// xv6中磁盘块数据结构,块⼤⼩512字节struct buf {int flags; // DIRTY, VALIDuint dev;uint sector; // 对应扇区struct buf *prev; // LRU cache liststruct buf *next; // 链式结构⽤于连接struct buf *qnext; // disk queueuchar data[512];};#define B_BUSY 0x1 // buffer is locked by some process#define B_VALID 0x2 // buffer has been read from disk#define B_DIRTY 0x4 // buffer needs to be written to disk2.fcntl.h:宏定义操作权限。

#define O_RDONLY 0x000 // 只读#define O_WRONLY 0x001 // 只写#define O_RDWR 0x002 // 读写#define O_CREATE 0x200 // 创建3.stat.h:声明⽂件或⽬录属性数据结构。

#define T_DIR 1 // Directory#define T_FILE 2 // File#define T_DEV 3 // Devicestruct stat {short type; // Type of fileint dev; // File system's disk deviceuint ino; // Inode numbershort nlink; // Number of links to fileuint size; // Size of file in bytes};4.fs.h / fs.c:声明超级块、dinode、⽂件和⽬录数据结构,以及相关的宏定义。

开源的api文档管理系统

开源的api文档管理系统

开源的api⽂档管理系统1、国外的话Swaggerswagger-ui2、国内的Showdoc国内开源的⾮常好⽤的⼀款API⽂档管理系统,安装也⾮常⽅便,只需将源代码放到项⽬⽬录下⾃动安装运⾏即可,不要要注意PHP版本必须⼤于5.3.3、界⾯简洁功能强⼤的EOAPI5、postMan6、docute: ⽆需编译的⽂档撰写⼯具像 gitbook 之类的⼯具需要编译后发布,⽽ docute 让你直接写 markdown ⽂件作为⽂档来显⽰⽽不需要编译成 html 这⼀步,你的⽂档⽬录⾥只需要⼀个⾸页 index.html 和你的配置⽂件 config.js。

docute 会直接渲染这些 markdown ⽂件为⼀个单页应⽤。

配合 github pages 发布到 ./docs ⽬录效果更佳,当然发布到任何地⽅都可以。

7、SmartWiki 接⼝⽂档在线管理系统8、SosoApiSosoApi,编辑Swagger UI的神器9、CrapApi开源接⼝管理系统演⽰地址CrapApi:⼀个由angularjs+bootstrap+springMVC搭建的⾼性能的免费开源的API接⼝、⽂档管理系统(应⽤接⼝管理系统)主要功能:api接⼝管理、数据字典管理、接⼝数据模拟、接⼝⽂档管理(⽀持markdown、kindereditor等编辑器)、⽀持本地部署或在线使⽤、⽀持通过建表语句导⼊数据字典...其他功能:项⽬管理、⽤户管理、模块管理、接⼝管理、接⼝版本管理、接⼝拷贝、接⼝⽂档pdf下载、接⼝mock、模块加密访问、接⼝在线调试、数据字典管理、数据字典加密访问多管理员、多权限、多⾓⾊管理、⾃定义菜单、⾃定义⽹站样式、⽂档留⾔、错误码管理、接⼝排序、DOC、PDF、TEXT、EXCEL等资源管理、⽀持版本号控制、⽂档内容检索、操作⽇志记录、根据⽇志恢复数据、markdown编辑器、kindeditor编辑器、angularjs编辑器、Lucene搜索、项⽬成员管理...11、Web API⽂档⽣成⼯具apidoc这个需要在编辑后⽣成静态的HTML页⾯,然后上传到服务器。

信息系统及工业控制系统源代码安全审计管理要求

信息系统及工业控制系统源代码安全审计管理要求

源代码审计管理要求
通过代码审查检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并对源代码进行修订以减少或杜绝软件缺陷;
代码审计具体内容如下:
1、系统所用开源框架
检查系统所使用的开源框架,包含java反序列化漏洞,导致远程代码执行,SQL注入漏掉,Spring、Struts2的相关安全隐患。

2、应用代码关注要素
检查日志伪造漏洞,密码明文存储,资源管理,调试程序残留,二次注入,反序列化。

3、API滥用
检查不安全的数据库调用、随机数创建、内存管理调用、字符串操作,危险的系统方法调用。

4、源代码设计
检查不安全的域、方法、类修饰符未使用的外部引用、代码。

5、错误处理不当
检查程序异常处理、返回值用法、空指针、日志记录。

6、直接对象引用
检查直接引用数据库中的数据、文件系统、内存空间。

7、资源滥用
检查不安全的文件创建/修改/删除,竞争冲突,内存泄露。

8、业务逻辑错误
检查欺骗密码找回功能,规避交易限制,越权缺陷Cookies和session的问题。

9、规范性权限配置
检查数据库配置规范,Web服务的权限配置SQL语句编写规范。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件管理系统一、实验目的通过设计一个多用户文件系统,了解操作系统中文件的组织与管理,熟悉文件管理所用的数据结构,加深对文件系统内部功能实现过程的理解。

二、实验内容1.用C语言或C++语言设计一个最多包括N个用户的多用户文件系统,约定每个用户最多保存M个文件。

同时限制一个用户在进入系统后,最多打开L个文件。

2.系统应具备一定的健壮性。

即能够检查用户所输入命令的正确性,出错时显示出必要的信息。

另外,对文件需设置必要的保护措施。

3.文件目录结构采用两级目录结构:主文件目录和用户文件目录#include"io.h"#include"conio.h"#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"#include"ctype.h"#define N 30 /*用户数*/#define M 20 /*一个用户可保存M个文件*/#define L 5 /*用户只能一次打开L个文件*/typedef struct MFD /*主文件目录*/{char username[100];char password[100];FILE fp; /*文件指针*/}MFD;///////////typedef struct UFD /*用户文件目录*/{char filename[256];char protect; /*保护码*/int length; /*文件长度*/}UFD;//////////typedef struct OFD /*打开文件目录*/{char filename[256];char opencode; /*打开保护码*/int fp; /*读写指针*/}OFD;//////////typedef struct COMM /*命令串*/{char string[256]; /*命令*/struct COMM *next;/*后继指针*/}COMM;////////////MFD mainfd[N]; /*主文件目录数组*/UFD userfd[M]; /*用户文件目录数组*/OFD openfd[L]; /*打开文件目录数组*/////////COMM*command; /*命令串指针*/char username[10];int usernum,savenum,opennum;int workfile;void init();void init_ufd(char *username);/*初始化用户文件目录*/ void mesg(char *str); /*消息*/char *getpass(); /*设置口令函数声明*/ char *getuser(); /*设置用户函数声明*/ COMM *readcommand(); /*读命令串函数声明*/ void login(); /*用户登录*/void logout(); /*用户注销*/void setpass(); /*设置口令*/void create(); /*创建文件*/void mydelete(); /*删除文件*/void myread(); /*读文件*/void myopen(); /*打开文件*/void myclose(); /*关闭文件*/void mywrite(); /*写文件*/void help(); /*帮助*/void dir(); /*列文件目录*/void mycopy(); /*复制文件*/void myrename(); /*重命名文件名*//////////////void main(){init();for(;;){readcommand();if(strcmp(command->string,"create")==0)create();else if(strcmp(command->string,"delete")==0)mydelete();else if(strcmp(command->string,"open")==0)myopen();else if(strcmp(command->string,"close")==0)myclose();else if(strcmp(command->string,"read")==0)myread();else if(strcmp(command->string,"write")==0)mywrite();else if(strcmp(command->string,"copy")==0)mycopy();else if(strcmp(command->string,"rename")==0)myrename();else if(strcmp(command->string,"login")==0)login();else if(strcmp(command->string,"setpass")==0)setpass();else if(strcmp(command->string,"logout")==0)logout();else if(strcmp(command->string,"help")==0)help();else if(strcmp(command->string,"dir")==0)dir();else if(strcmp(command->string,"exit")==0)break;elsemesg("Bad command!");}}///////////////////void init(){FILE *fp;char tempname[20],temppass[20];int i=0;usernum=0;savenum=0;opennum=0;strcpy(username,"");if((fp=fopen("mainfile.txt","r"))!=NULL){while(!feof(fp)){strcpy(tempname,"");fgets(tempname,20,fp);if(strcmp(tempname,"")!=0){fgets(temppass,20,fp);tempname[strlen(tempname)-1]='\0';temppass[strlen(tempname)-1]='\0';strcpy(mainfd[usernum].username,tempname);strcpy(mainfd[usernum].password,tempname);usernum++;}}fclose(fp);}}///////////////////////void init_ufd(char *username)/*初始化用户文件目录*/{FILE *fp;char tempfile[100],tempprot;int templength;savenum=0;opennum=0;workfile=-1;if((fp=fopen(username,"w+"))!=NULL){while(!feof(fp)){strcpy(tempfile,"");fgets(tempfile,50,fp);if(strcmp(tempfile,"")!=0){fscanf(fp,"%c",&tempprot);fscanf(fp,"%d",&templength);tempfile[strlen(tempfile)-1]='\0';strcpy(userfd[savenum].filename,tempfile);userfd[savenum].protect=tempprot;userfd[savenum].length=templength;savenum++;fgets(tempfile,50,fp);}}}fclose(fp);}////////////////////void mesg(char *str){printf("\n %s\n",str);}////////////////////////////char *getuser(){char username[20];char temp;int i;username[0]='\0';for(i=0;i<10;){while(!kbhit());temp=getch();if(isalnum(temp)||temp=='_'||temp==13){username[i]=temp;if(username[i]==13){username[i]='\0';break;}putchar(temp);i++;username[i]='\0';}}return(username);}///////////////////char *getpass(){char password[20];char temp;int i;password[0]='\0';for(i=0;i<10;){while(!kbhit());temp=getch();if(isalnum(temp)||temp=='_'||temp==13){password[i]=temp;if(password[i]==13){password[i]='\0';break;}putchar('*');i++;password[i]='\0';}}return(password);}///////////////COMM *readcommand(){char temp[256];char line[256];int i,end;COMM *newp,*p;command=NULL;strcpy(line,"");while(strcmp(line,"")==0){printf("\nc:\\>");gets(line);}for(i=0;i<=strlen(line);i++){if(line[i]==' ')i++;end=0;while(line[i]!='\0'&&line[i]!=' '){temp[end]=line[i];end++;i++;}if(end>0){temp[end]='\0';newp=(COMM *)malloc(sizeof(COMM *));strcpy(newp->string,temp);newp->next=NULL;if(command==NULL)command=newp;else{p=command;while(p->next!=NULL)p=p->next;p->next=newp;}}}p=command;return(command);}/////////////////////////////void login() /*用户注册*/{FILE *fp;int i;char password[20],confirm[20],tempname[20];if(command->next==NULL){printf("\n User Name:");strcpy(tempname,getuser());}else if(command->next->next!=NULL){mesg("Too many parameters!");return;}elsestrcpy(tempname,command->next->string);for(i=0;i<usernum;i++)if(strcmp(mainfd[i].username,tempname)==0)break; /*从mainfd表中查找要注册的用户*/ if(i>=usernum) /*新用户*/{printf("\n new user account,enter your password twice!");printf("\n Password:");strcpy(password,getpass());/*输入口令且返回之*/printf("\n Password:");strcpy(confirm,getpass()); /*第二次输入口令*/if(strcmp(password,confirm)==0)/*用户数不能超过N*/{if(usernum>=N)mesg("Create new account false!number of user asscount limited.\n login fasle!");else{strcpy(mainfd[usernum].username,tempname);/*把新用户和口令填入mainfd中*/strcpy(mainfd[usernum].password,password);usernum++;strcpy(username,tempname);mesg("Create a new user!\n login success!");init_ufd(username); /*初始化用户文件目录*/fp=fopen("mainfile.txt","w+"); /*把新用户填入mainfile.txt文件中*/for(i=0;i<usernum;i++){fputs(mainfd[i].username,fp);fputs("\n",fp);fputs(mainfd[i].password,fp);fputs("\n",fp);}fclose(fp);}}else{mesg("Create new account false! Error password.");mesg("login false!");}}else{printf("\n Password:");strcpy(password,getpass());if(strcmp(mainfd[i].password,password)!=0)mesg("Login false! Error password.");else{mesg("Login success!");strcpy(username,tempname);init_ufd(username);}}}/////////////////////////void logout() /*用户注销*/{if(command->next!=NULL)mesg("Too many parameters!");else if(strcmp(username,"")==0)mesg("No user login!");else{strcpy(username,"");opennum=0;savenum=0;workfile=-1;mesg("User logout!");}}////////////////////void setpass() /*修改口令*/{int i=0;FILE *fp;char oldpass[20],newpass[20],confirm[20];if(strcmp(username,"")==0)mesg("No user login!");else{printf("\n Old password:");strcpy(oldpass,getpass());for(int i=0;i<usernum;i++){if(strcmp(mainfd[i].username,username)==0)break;}if(strcmp(mainfd[i].password,oldpass)!=0)mesg("Old password error!");else{printf("\n New password:");strcpy(newpass,getpass());printf("\n Confirm password:");strcpy(confirm,getpass());if(strcmp(newpass,confirm)!=0)mesg("Password not change! confirm different.");else{strcpy(mainfd[i].password,newpass);mesg(" Password change !");fp=fopen("mainfile.txt","w+");for(i=0;i<usernum;i++){fputs(mainfd[i].username,fp);fputs("\n",fp);fputs(mainfd[i].password,fp);fputs("\n",fp);}fclose(fp);}}}}////////////////void create(){int i=0;FILE *fp;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{for(i=0;i<savenum;i++){if(strcmp(userfd[i].filename,command->next->string)==0)break;}if(i<savenum)mesg("Error! the file already existed!");else if(savenum>=M)mesg("Error! connot create file! number of files limited!");else{strcpy(userfd[savenum].filename,command->next->string);userfd[i].protect='r';userfd[i].length=rand();savenum++;mesg("Create file success!");fp=fopen(username,"w+");for(i=0;i<savenum;i++){fputs(userfd[i].filename,fp);fputs("\n",fp);fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);}fclose(fp);}}}/////////////////void mydelete() /*删除*/{int i=0;int tempsave=0;FILE *fp;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{for(i=0;i<savenum;i++){if(strcmp(userfd[i].filename,command->next->string)==0)break;}if(i>=savenum)mesg("Error! the file not existed!");else{tempsave=i;for(i=0;i<opennum;i++){if(strcmp(command->next->string,openfd[i].filename)==0)break;}if(i>=opennum)mesg("File not open");////////////////////////////////////////////else{if(tempsave==savenum-1)savenum--;else{for(;tempsave<savenum-1;tempsave++){strcpy(userfd[tempsave].filename,userfd[tempsave+1].filename);userfd[tempsave].protect=userfd[tempsave+1].protect;userfd[tempsave].length=userfd[tempsave+1].length;}savenum--;}mesg("Delete file success!");fp=fopen(username,"w+");for(i=0;i<savenum;i++){fputs(userfd[i].filename,fp);fputs("\n",fp);fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);}fclose(fp);}}}}//////////////////void myread() /*读*/{int i=0;int tempsave=0;char tempfile[100];if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");elsestrcpy(tempfile,command->next->string);for(i=0;i<savenum;i++){if(strcmp(tempfile,userfd[i].filename)==0)break;}if(i>=savenum)mesg("File not existed!");else{tempsave=i;for(i=0;i<opennum;i++){if(strcmp(tempfile,openfd[i].filename)==0)break;}if(i>=opennum)mesg("File not opened");else{if(userfd[tempsave].length<1000)printf("\n The file size is %d KB",userfd[tempsave].length);else if(userfd[tempsave].length==1000)printf("\n The file size is 1000 KB");elseprintf("\n The file size is %d,%d KB",userfd[tempsave].length/1000,userfd[tempsave].length%1000);mesg("File read");}}}}/////////////////void myopen()/*打开*/{int i=0;int type=0;char tempcode;char tempfile[100];if(strcmp(username,"")==0)mesg("No user login!");else if(command->next==NULL)mesg("Too few parameters!");{strcpy(tempfile,"");tempcode='r';if(strcmp(command->next->string,"/r")==0){tempcode='r';type=1;}else if(strcmp(command->next->string,"/w")==0){tempcode='w';type=1;}else if(strcmp(command->next->string,"/d")==0){tempcode='d';type=1;}else if(command->next->string[0]=='/')mesg("Error! /r/w/d request!");else if(command->next->next!=NULL)mesg("Too many parameters!");elsestrcpy(tempfile,command->next->string);if(type==1){if(command->next->next!=NULL){if(command->next->next->next!=NULL)mesg("Too many parameters!");elsestrcpy(tempfile,command->next->next->string);}elsemesg("Too few parameters!");}if(strcmp(tempfile,"")){for(i=0;i<savenum;i++){if(strcmp(tempfile,userfd[i].filename)==0)break;}if(i>=savenum)mesg("File not existed!");else{for(i=0;i<opennum;i++){if(strcmp(tempfile,openfd[i].filename)==0)break;}if(i<opennum){mesg("File already opened!");if(openfd[i].opencode!=tempcode){openfd[i].opencode=tempcode;mesg("File permission changed!");}}else if(opennum>=L){mesg("Error! connot open file! number of opened files limited!");}else{strcpy(openfd[opennum].filename,tempfile);openfd[opennum].opencode=tempcode;workfile=opennum;opennum++;mesg("File open success!");}}}}}///////////////////////void myclose()/*关闭*/{int i=0;int tempsave=0;char tempfile[100];if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{strcpy(tempfile,command->next->string);for(i=0;i<savenum;i++){if(strcmp(tempfile,userfd[i].filename)==0)break;}if(i>=savenum)mesg("File not existed!");else{for(i=0;i<opennum;i++){if(strcmp(tempfile,openfd[i].filename)==0)break;}if(i>=opennum)mesg("File not opened");else{if(i==opennum-1)opennum--;else{for(;i<opennum-1;i++){strcpy(openfd[i].filename,openfd[i+1].filename);openfd[i].opencode=openfd[i+1].opencode;}opennum--;}mesg("Close file success!");}}}}/////////////////////////void mywrite()/*写*/{int i=0;int tempsave=0;char tempfile[100];if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{strcpy(tempfile,command->next->string);for(i=0;i<savenum;i++){if(strcmp(tempfile,userfd[i].filename)==0)break;}if(i>=savenum)mesg("File not existed!");else{tempsave=i;for(i=0;i<opennum;i++){if(strcmp(tempfile,openfd[i].filename)==0)break;}if(i>=opennum)mesg("File not opened");else{mesg("File write");int tt=rand();if(userfd[tempsave].length<=1000)printf("\n The file size from %d KB to %d KB",userfd[tempsave].length,userfd[tempsave].length+tt);/* else if(userfd[tempsave].lenght=1000)printf("\n The file size from 1000 KB");*/elseprintf("\n The file size form %d,%d KB to %d,%d KB",userfd[tempsave].length/1000,userfd[tempsave].length%1000,userfd[tempsave].length+tt/10 00,userfd[tempsave].length+tt%1000);userfd[tempsave].length=userfd[tempsave].length+tt;}}}}///////////////////void help()/*帮助*/{static char *cmd[]={"login","setpass","logout","create","open","read","write","close","delete","dir","help","exit","copy","rename"};static char *cmdhlp[]={"aommand format: login [<username>]","command format:setpass","command format:logout","command format:create <filename>","command format:open [/r/w/d] <filename>","command format:read <filename>","command format:write <filename>","command format:close <filename>","command format:delete <filename>","command format:dir [/u/o/f]","command format:help [<command>]","command format:exit","command format:copy <source filename> <destination filename>","command format:rename <old filename> <new filename>"};static char *detail[]={"explain:user login in the file system.","explain:modify the user password.","explain:user logout the file system.","explain:creat a new file.","explain:/r -- read only [deflaut]\n\t /w -- list opened files \n\t /d --read,modify and delete.","explain:read the file.","explain:modify the file.","explain:close the file.","explain:delete the file.","explain:/u -- list the user account\n\t /0 -- list opened files\n\t /f --list user file[deflaut].","explain:<command> -- list the command detail format and explain.\n\t [deflaut] list the command.","explain:exit from the file sysytem.","explain:copy from one file to another file.","explain:modify the file name."};int helpnum=14;int i=0;if(command->next==NULL){mesg(cmdhlp[10]);mesg(detail[10]);mesg("step 1: login");printf("\t if old user then login,if user not exist then create new user");mesg("step 2: open the file for read(/r),write(/w)or delete(/d)");printf("\t you can open one or more files.one command can open one file");mesg("step 3: read,write or delete some one file");printf("\t you can operate one of the opened files.one command can open one file");mesg("step 4: close the open file");printf("\t you can close one of the opened files.one command can open one file");mesg("step 5: user logout.close all the user opened files");printf("\n command list:");for(i=0;i<helpnum;i++){if(i%4==0)printf("\n");printf(" %-10s",cmd[i]);}}else if(command->next->next!=NULL)mesg("Too many parameters!");else{for(i=0;i<helpnum;i++){if(strcmp(command->next->string,cmd[i])==0)break;}if(i>=helpnum)mesg("the command not existed!");else{mesg(cmdhlp[i]);mesg(detail[i]);}}}//////////////////////void dir()/*列目录文件*/{int i=0;int type=0;char tempcode;if(strcmp(username,"")==0)mesg("No user login!");else{if(command->next==NULL){tempcode='f';}else{if(strcmp(command->next->string,"/u")==0){tempcode='u';}else if(strcmp(command->next->string,"/o")==0){tempcode='o';}else if(strcmp(command->next->string,"/f")==0){tempcode='f';}else if(command->next->string[0]=='/')mesg("Error! /u/o/f request!");else if(command->next->next!=NULL)mesg("Too many parameters!");}if('u'==tempcode){printf("list the user account\n");printf("usename\n");for(i=0;i<usernum;i++){printf("%s\n",mainfd[i].username);}}else if('f'==tempcode){printf("list opened files\n");printf("filename length protect\n");for(i=0;i<savenum;i++){printf("%s%s%d%s%s%c\n",userfd[i].filename," ",userfd[i].length,"KB"," ",userfd[i].protect);}}else if('o'==tempcode){printf("list user files\n");printf("filename opencode\n");for(i=0;i<opennum;i++){printf("%s%s%c\n",openfd[i].filename," ",openfd[i].opencode);}}}}/////////////////////////void mycopy()/*复制*/{char sourfile[256],destfile[256];int i=0,j=0,temp=0;FILE *fp;char tempchar;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next==NULL)mesg("Too few parametets!");else if(command->next->next->next!=NULL)mesg("Too many parameters!");else{strcpy(sourfile,command->next->string);strcpy(destfile,command->next->next->string);for(i=0;i<savenum;i++){if(strcmp(sourfile,userfd[i].filename)==0)break;}temp=i;if(i>=savenum)printf("\n the source file not eixsted!");else{for(i=0;i<opennum;i++){if(strcmp(sourfile,openfd[i].filename)==0)break;}if(i>=opennum)printf("\n the source file not opened!");else{for(j=0;j<opennum;j++){if(strcmp(destfile,openfd[i].filename)==0)break;}if(j<opennum)mesg("Error! the destination file opened,you must close it first.");else{for(j=0;j<savenum;j++){if(strcmp(destfile,userfd[i].filename)==0)break;}if(j<savenum){mesg("Warning! the destination file exist!");printf("\n Are you sure to recover if ? [Y/N]");while(!kbhit());tempchar=getch();if(tempchar=='N'||tempchar=='n')mesg("Cancel! file not copy.");else if(tempchar=='Y'||tempchar=='y'){mesg("File copy success!file recovered!");userfd[j].length=userfd[i].length;userfd[j].protect=userfd[i].protect;fp=fopen(username,"w+");for(i=0;i<savenum;i++){fputs(userfd[i].filename,fp);fputs("\n",fp);fprintf(fp,"%C\n%d\n",userfd[i].protect,userfd[i].length);}fclose(fp);}}else if(savenum>=M)mesg("copy false! file total limited.");else{strcpy(userfd[savenum].filename,destfile);userfd[savenum].length=userfd[temp].length;userfd[savenum].protect=userfd[temp].protect;savenum++;fp=fopen(username,"w+");for(i=0;i<savenum;i++){fputs(userfd[i].filename,fp);fputs("\n",fp);fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);}fclose(fp);mesg("File copy success!");}}}}}}///////////////////////void myrename()/*文件重命名*/{char oldfile[256],newfile[256];int i=0,temp=0;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next==NULL)mesg("Too few parametets!");else if(command->next->next->next!=NULL)mesg("Too many parameters!");else{strcpy(oldfile,command->next->string);strcpy(newfile,command->next->next->string);for(i=0;i<savenum;i++){if(strcmp(oldfile,userfd[i].filename)==0)break;}temp=i;if(temp>=savenum)printf("\n the source file not eixsted!");else if(temp!=i&&i<savenum){printf("\n newfile and the existing files is the same name, please re-naming!");}else{for(i=0;i<opennum;i++){if(strcmp(oldfile,openfd[i].filename)==0)break;}if(i>=opennum)printf("\n the source file not opened!");else if(strcmp(oldfile,newfile)==0){printf("Rename false! oldfile and newfile can not be the same.");}else{strcpy(openfd[i].filename,newfile);strcpy(userfd[temp].filename,newfile);mesg("Rename file success!\n");}}}}。

相关文档
最新文档