本文目录一览:
如何下载openkm文档管理系统源代码
1:首先去下载源代码,一般的开源项目的源代码都放在这里,进入网站
后会看到一个搜索栏,你输入openkm就可以搜索到;
2:输入你要找的开源项目名称如:openkm,回车进入;
3:直接点击Download Now按钮可以下载运行环境,源代码需要点击红色箭头指向的Read more,
进入后点击tools的code链接;
4:红色箭头指向的就是svn链接,然后就可以通过svn客户端工具进行源代码下载了。
操作系统编写文件管理系统
为了实现远程文件管理系统的跨操作系统运行,设计了一套基于 Java Socket 的远程文件类应用程序接口(API),并在此基础上实现了一个图形界面的 Client/Server结构的远程文件管理系统。这套API在形式上类似于SunJDK本地文件类,开发人员使用这套 API 能方便快速地实现能满足自身需要的远程文件管理系统。关键词:Java; socket; JDK; 文件管理系统中图法分类号: 文献标识码: 文章编号:Design and realization of Java based remote file management system JIANGYing ,XIU Gui_hua (Shenyang Institute of Chemical Tecnology , Shenyang 110142, China) Abstract:A set of Java socket based application programming interface API) about the remote file system is designed to realize the(remote file management system's running on different operating systems, and a client/server structure based remote file managementsystem is realized with graphic interface using that set of API. This set of API is similar to the local file operation classes of the Sun JDK.Using this set of API the programmers can realize a remote file management system satisfying their requirement conveniently and rapidly. Key words:Java; socket; JDK; file management system 1 引 言 现有的远程文件管理系统主要有以下两种类型:①基于 FTP 协议的系统;②各操作系统自带的,只能在相同操作系统之间进行远程文件管理的系统。 对于第 1 种系统,有安装、管理复杂等缺点,并且同一种服务器端或客户端软件只能在同一种操作系统上安装使用;而第 2 种系统只能在相同的操作系统中使用。 Java 语言是一种优秀的跨平台语言,用 Java 语言编写的程序编译之后产生的 class 文件能在不同的操作系统上运行。因此,设计了一套在形式上类似于 Java 本地文件类的远程文件管理 API,并且在这套 API 的基础上实现了一个基于 C/S结 构的图形界面远程文件管理系统,这套系统的服务器端和客户端都能在不同的操作系统上运行。基于这套 API,各种类型的用户都能方便快速地实现出能满足自身需要的远程文件管理系统。 2 设计原则和相关技术 2.1 设计原则 系统基于传统的 Client/Server 两层结构设计,设计原则如 下:①客户端和服务器端都采用纯 Java语言编写,以保证系统的跨平台应用性;②客户端和服务器端用 Socket 进行底层通信;服务器端程序作为监听程序在需要管理的文件系统所在的主机中运行,监听来自客户端,也就是文件系统的管理者的管理操作命令。客户端和服务器端用 Socket 保持通信。 2.2 Java Socket 概述 流式 Socket 所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟 连接通道,然后它们通过这条通道传送数据信息进行通信,当 通 信 结 束 时 再 将 原 先 所 建 立 的 连 接 拆 除 。 Java 语 言 用 Java.Net.Socket 和Java.Net.ServerSocket 类来实现 Socket 通信。下面的代码片断表示了一个建立服务器端监听程序并与客户端进行简单通信的过程: ……//在 8000 端口新建一个监听服务ServerSocket listener = new ServerSocket(8000); //阻塞,直至捕捉到一个 client 端的请求Socket client = listener.accept(); //得到向客户端的输出流OutputStream out = client.getOutputStream(); //得到来源于客户端的输入流InputStream in = client.getInputStream(); String strHello =“Hello!”; byte[] hello = strHello.getBytes(); //向客户端发送消息“Hello!”out.write(hello); ……由上面的程序可见,监听程序在捕捉到客户端的连接请求后能得到向客户端的输出流(OutputStream 类)和来源于客户端的输入流(InputStream 类),调用输出流和输入流的相关方法,就能向客户端发送字节或者从客户端接收字节,这样就为远程文件管理系统提供了技术支持。 2.3 Java 文件类概述 Java 语言的文件操作功能十分强大,有丰富的类库来支 持文件操作,主要有 File 类、FileInputStream 类、FileOutputStream 类、FileSystemView 类、RandomAccessFile 类等。其中, File 类用来管理磁盘文件和目录,FileInputStream 和 FileOutputStream 类分别管理文件的输入和输出,FileSystemView 类主要 实现操作系统级别的文件操作 。这些类使用方便,功能强大,但是只能执行本地文件操 作。下面的代码显示了用 File 类和 FileSystemView 类判断一个驱动器是否为软盘驱动器的方法: …… FileSystemView fs= FileSystemView.getFileSystemView(); File drive = new File“A:\\”); if(fs.isFloppyDrive(drive)) System.out.println(“A 盘是软盘驱动器。”); else System.out.println(“A 盘不是软盘驱动器。”); …… 3 系统的设计 系统由 3 个部分组成:相关的一套 API,供客户端程序使用;服务器端程序;客户端程序。 3.1 相关 API 这套 API 的核心类是 FileSystem 类和 File 类,而 File 类的 实现又依赖于FileSystem类。(1)rg.rmfs.FileSystem 此类对应 Sun JDK 中的 javax.swing.filechooser.FileSystemView 类,并且是它的子类;FileSystem 类表示一个远程的文件 系统,用在客户端程序中,通过它提供的静态方法getFileSystem()可以得到 FileSystem 类的对象: public class FileSystem extends FileSystemView { private Socket socket; //与远程文件系统的 Socket 连接 private OutputStream out; //输出到远程文件系统的输出流private InputStream in; //来源于远程文件系统的输入流 public static synchronized FileSystem getFileSystem(String host,int port){ …… //用指定的主机和端口号来取得与远程文件系统的连接 socket = new Socket(host,port); out = socket.getOutputStream(); in = socket.getInputStream(); …… } //从一个文件输入流中读入字节 int read(FileInputStream fis,in,byte[] b,int off,int len) { …… String cmd =“READ”+fis.getID()+“END”; out.write(cmd.getBytes[]); in.read(b,off,len); …… } //向文件输出流输出字节 void write(FileOutputStream fos,byte[] b,int off,int len){ … String cmd =“WRITE”+fos.getID()+“END”; out.write(cmd.getBytes[]); out.write(b,off,len); { … { …… (2) org.rmfs.File 此类对应 Sun JDK 中的 Java.io. File 类,用在客户端程序 中,表示远程文件系统中的一个文件或者目录: public class File implements java.io.Serializable,java.lang.Comparable{ private FileSystem fs; //表示此文件所在的远程文件系统 private String path; //表示此文件在文件系统中的路径 //得到此文件所在的文件系统public FileSystem getFileSystem() {return fs; } //构造方法 public File(FileSystem fs,String path){ if path == null || fs==null) {…… throw new NullPointerException(); { …… {.…… (3) org.rmfs. FileInputStream 此类对应 Sun JDK 中的 java.io.FileInputStream 类,用来从一个远程文件中读取数据 public class FileInputStream extends java.io.InputStream { private FileSystem fs; //对应的文件所在的远程文件系统对象 private File file; //对应的远程文件对象//构造方法public FileInputStream(File file){ this.file = file; this.fs = file.getFileSystem(); {…… {…… (4)Java.io.FileOutputStream 此类对应 Sun JDK 中的 Java.io.FileOutputStream 类,用来向一个远程文件写数据 public class FileOutputStream extends java.io.OutputStream{ …//与 FileInputStream类似略 //构造方法 public FileOutputStream(File file){ this.file = file; this.fs = file.getFileSystem(); …… { //向输出流中写数据 public void write(byte[] b, int off, int len) throws IOExc-eption{ … fs.write(this,b,off,len); { …… {…… (5)org.rmfs. RandomAccessFile 此类对应 SunJDK 中的 java.io.RamdomAccessFile 类,功能也与之相似。由于前面介绍的 4 个类已经能实现远程文件管理系统的功能,故不再详细介绍此类。3.2 服务器端程序 服务器端程序向客户机提供远程文件访问服务,它实质上是一个在某个端口上进行监听的程序。FileSystem 类有一个域 socket,实际上就是与服务器端程序相连的 Socket 对象。服务器端程序直接与 FileSystem 类进行通信和传递数据。当服务器端程序捕捉到一个连接请求时,就代表有一个客户端程序正在连接服务器,这时,服务器端程序就生成一个线程来处理和客户端的通信。3.3 客户端程序 客户端程序使用上面介绍的 5 个类与远程文件系统进行通信,一个典型的操作流程是:调用 FileSystem getFileSystem(Stringhost, int port) 方法得到远程文件系统的对象;调用File(FileSystem fs,String path)方法得到一个远程文件对象;然后就可以根据得到的文件对象执行相关操作,如可以删除文件、可以向文件写数据(需要构造 FileOutputStream 类)、可以从文件中读取数据(需要构造 FileInputStream 类)等。 客户端程序使用上面介绍的 5 个类,就可以完全屏蔽具体的 Socket 操作来进行网络通信,大大降低了程序的复杂度,提高了程序的开发效率。4 结 论设计了一套在形式上类似于 Sun 公司的标准本地文件处理类的 API,并在这套 API 的基础上实现了一个 Client/Server 结构的远程文件管理系统。由于这套 API 在形式上与 Sun 公司的文件处理类有相似的接口,并且完全屏蔽了底层的 Socket 操作,所以用户用这套 API能方便、快速地实现符合自身要求的远程文件管理系统。本文作者创新点:设计了类似于 Sun 公司的标准本地文件处理类的 API,并在这套 API 的基础上实现了一个 Client/Server 结构的远程文件管理系统,使用户能方便、快速地实现符合自身要求的远程文件管理系统。
求助!C/C++编写文件管理系统
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//主文件结构体
struct MasterFile{
char username[20]; //用户名
char password[20]; //用户名密码
char flag; //标志
struct MasterFile *next;
};
//用户文件结构体
struct UserFile{
int fnum; //文件编号
char fname[20]; //文件名
int flength; //文件长度
char flag; //标志
char fpw[20]; //文件保护码
struct UserFile *link;
};
//全局变量
int shoudsave; //存储标记
int usingnum; //当前用户标记
struct MasterFile MFD[20]; //主目录
struct UserFile UFD[20][20]; //用户目录
//寻找主目录空闲区
struct MasterFile*MoveMFDToLast(){
for(int i=0;i20;i++){
if(MFD[i].flag==0)
usingnum=i;
return MFD[i];
}
return NULL;
}
//查找用户
struct MasterFile*SearchMFD(char str[]){
for(int i=0;i20;i++){
if(strcmp(str,MFD[i].username)==0){
usingnum=i;
return MFD[i];
}
}
return NULL;
}
//寻找用户目录空闲区
struct UserFile *MoveUFDToLast(){
for(int i=0;i20;i++){
if(UFD[usingnum][i].flag==0)
return UFD[usingnum][i];
}
return NULL;
}
//查找用户文件
struct UserFile *SearchUFD(int num){
for(int i=0;i20;i++){
if(UFD[usingnum][i].fnum==num)
return UFD[usingnum][i];
}
return NULL;
}
//删除用户文件目录
void LeftMoveUFD(int num){
for(int i=0;i20;i++){
if(UFD[usingnum][i].fnum==num){
for(int j=i;j19;j++){
UFD[usingnum][i].flag=UFD[usingnum][i+1].flag;
UFD[usingnum][i].flength=UFD[usingnum][i+1].flength;
strcpy(UFD[usingnum][i].fname,UFD[usingnum][i+1].fname);
UFD[usingnum][i].fnum=UFD[usingnum][i+1].fnum;
strcpy(UFD[usingnum][i].fpw,UFD[usingnum][i+1].fpw);
UFD[usingnum][i].link=UFD[usingnum][i+1].link;
}
}
}
}
//用户登陆
void Login(){
char flag1,flag2,flag3;
char str1[20],str2[20],str3[20],str4[20];
struct MasterFile *p;
printf("你是已有用户吗(y/n)?");
scanf("%s",flag1);
if(flag1=='n'){ //新用户登录
printf("请创建新的用户:(y/n)");
scanf("%s",flag2);
if(flag2=='n'){
printf("你已退出了系统!\n");
exit(1);
}else{
printf("请输入你的用户名:");
scanf("%s",str1);
printf("请输入口令:");
scanf("%s",str2);
p=MoveMFDToLast();
strcpy(p-username,str1);
strcpy(p-password,str2);
p-flag=1;
printf("%d",MFD[usingnum].flag);
p-next=NULL;
shoudsave=1; //存储标记
}
}else{ //旧用户登录
while(1){
printf("请输入你的用户名:"); //输入用户名
scanf("%s",str3);
p=SearchMFD(str3);
if(p==NULL){
printf("对不起,你输入的用户名不存在!\n");
printf("继续(y)还是放弃(n)?");
scanf("%s",flag3);
if(flag3=='y') continue;
else{
printf("你已退出了系统!\n");
exit(1);
}
}else{
while(1){
printf("请输入口令:"); //输入口令
scanf("%s",str4);
if(strcmp(str4,p-password)!=0){
printf("对不起,你输入的口令不正确,请重新输入.\n");
continue;
}else break;
}
}break;
}
}
}
//菜单
void menu(){
printf("\n********************************************************************************");
printf("\t1列文件目录\t\t\t\t\t2创建文件\n");
printf("\t3删除文件\t\t\t\t\t4读文件\n");
printf("\t5写文件\t\t\t\t\t\t0退出系统\n");
printf("********************************************************************************\n");
}
//列文件目录
void Dir(){
if(MFD[usingnum].next==0) printf("目前你不存在任何文件!\n");
else{
for(int i=0;i20;i++){
if(UFD[usingnum][i].flag==1)
printf("文件编号\t%d\t文件名\t%s\t文件长度\t%d\t保护码\t%s\n",UFD[usingnum][i].fnum,UFD[usingnum][i].fname,UFD[usingnum][i].flength,UFD[usingnum][i].fpw);
}
}
}
//创建文件
void Create(){
FILE *fp;
int num;
struct UserFile *f;
char str1[20],str2[20];
printf("请输入你要创建的文件名:"); //输入文件信息
scanf("%s",str1);
printf("请输入文件编号:");
scanf("%d",num);
printf("请输入文件保护码:");
scanf("%s",str2);
fp=fopen(str1,"w"); //创建文件
f=MoveUFDToLast(); //寻找用户目录空闲区
if(UFD[usingnum][0]==f) //连接主目录
MFD[usingnum].next=(struct MasterFile*)f;
f-link=(struct UserFile*)fp; //设置用户目录
MFD[usingnum].next=(struct MasterFile*)UFD[usingnum][0];
strcpy(f-fname,str1);
strcpy(f-fpw,str2);
f-fnum=num;
f-flength=0;
f-flag=1;
fclose(fp);
shoudsave=1; //设置存储标记
printf("文件已创建!\n");
}
//删除文件
void Delete(){
struct UserFile *f;
int num;
printf("请输入你要删除的文件编号:");
scanf("%d",num);
f=SearchUFD(num); //查找用户文件
if(f==NULL) {
printf("你要删除的文件不存在!\n");
}else{
LeftMoveUFD(num); //删除用户文件目录
printf("文件已删除!\n");
}
shoudsave=1; //设置存储标记
}
//读文件
void Read(){
char ch;
struct UserFile *f;
FILE *fp;
int num;
printf("请输入你要读的文件的编号:");
scanf("%d",num);
f=SearchUFD(num); //查找文件
if(f==NULL){
printf("你输入的文件不存在!\n");
}else{
if((fp=fopen(f-fname,"r"))==NULL){ //打开指定文件
printf("不能打开该文件!\n");
exit(0);
}
}
ch=fgetc(fp); //输出文件内容
while(ch!=EOF){
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp); //关闭文件
printf("文件已读完毕!\n");
}
//写文件
void Write(){
char ch;
struct UserFile *f;
FILE *fp;
int num;
printf("请输入你要写的文件的编号:");
scanf("%d",num);
f=SearchUFD(num); //查找文件
if(f==NULL){
printf("你输入的文件不存在!\n");
}else{
if((fp=fopen(f-fname,"wr"))==NULL){ //打开指定文件
printf("不能打开该文件!\n");
exit(0);
}
}
printf("请按字符输入内容(以'#'表示结束符)"); //写入文件
scanf("%s",ch);
while(ch!='#'){
fwrite(ch,1,1,fp);
scanf("%s",ch);
}
fclose(fp); //关闭文件
shoudsave=1; //设置存储标记
printf("文件写入完毕!\n");
}
//保存
void Save(){
FILE *fpm,*fpu;
int flag=1,count=0;
fpm=fopen("F:\\MasterFile.txt","wb"); //打开主文件
if(fpm==NULL){
printf("\n提示:重新打开主文件信息文件时发生错误!\n");
exit(1);
}
for(int i=0;i20;i++)
fwrite(MFD[i],sizeof(struct MasterFile),1,fpm); //保存主文件目录信息
fclose(fpm);
printf("主文件目录信息保存完毕!\n");
fpu=fopen("F:\\UserFile.txt","wb"); //打开用户文件
if(fpu==NULL){
printf("\n提示:重新打开用户目录信息文件时发生错误!\n");
exit(1);
}
for(int j=0;j20;j++) //保存用户文件目录信息
fwrite(UFD[j],sizeof(struct UserFile),20,fpu);
fclose(fpu);
printf("用户文件目录信息保存完毕!\n");
}
//主函数
void main(){
FILE *fpm,*fpu; //文件指针
int sel;
char ch;
char jian;
printf("\t\t\t\t文件管理系统\n\t\t\t\t\n");
fpm=fopen("F:\\MasterFile.txt","rb"); //打开主文件目录信息文件
if(fpm==NULL) {
printf("\n提示:主文件目录信息文件还不存在,是否创建?(y/n)\n");
scanf("%s",jian);
if(jian=='y'||jian=='Y')
fpm=fopen("F:\\MasterFile.txt","wb"); //创建主文件目录的文件
else exit(0);
}
fpu=fopen("F:\\UserFile.txt","rb"); //打开用户文件目录信息文件
if(fpu==NULL){
printf("\n提示:用户文件目录信息文件还不存在,是否创建?(y/n)\n");
scanf("%s",jian);
if(jian=='y'||jian=='Y')
fpu=fopen("F:\\UserFile.txt","wb"); //创建用户文件目录的文件
else exit(0);
}
printf("文件正在打开,请稍等...");
for(int i=0;i20;i++) //读取主文件目录信息
fread(MFD[i],sizeof(struct MasterFile),1,fpm); //将文件的内容放入接点中
fclose(fpm); // 关闭文件
while(!feof(fpu)){ //读取用户目录文件信息
for(int i=0;i20;i++){
if(fread(UFD[i][0],sizeof(struct UserFile),20,fpu)) //将文件的内容放入接点中
MFD[i].next=(struct MasterFile*)UFD[i][0];
}
}
fclose(fpu); //关闭文件
printf("\n文件已导入完毕!\n");
Login(); //用户登录
while(1) { //菜单操作
menu();
printf("请你选择操作:");
scanf("%d",sel);
if(sel==0){ //保存文件信息
if(shoudsave==1){
getchar();
printf("\n资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",ch);
if(ch=='y'||ch=='Y')
Save();
}
printf("\n你已经退出系统,再见!\n");
break;
}
switch(sel){
case 1:Dir();break; //列文件目录
case 2:Create();break; //创建文件
case 3:Delete();break; //删除文件
case 4:Read();break; //读文件
case 5:Write();break; //写文件
default: printf("你输的选项有误,请重新输入!\n");break;
}
}
}
怎么用C++实现一个文件管理系统(操作系统练习)
现在几乎都不用MFC了,做管理系统都用 C# + .NET + SQL Server#includestdio.h
#includestdlib.h
#includeconio.h
int main()
{
int employee[10]={2700,2800,2900,3000,3100,3200,33000,3400,3500,3600};
int index,selection; /*数组索引变量*/
int newsalary; /*修改后工资变量*/
while (1) /*循环结构*/
{ /* 用户菜单*/
printf("=========================================\n");
printf("=simple employee salay management system=\n");
printf("=1.display employee salay =\n");
printf("=2.modify employee salay =\n");
printf("=3.quit =\n");
printf("=========================================\n");
printf("please input your choose:");
scanf("%d",selection);/*读取用户输入选项*/
if (selection==1||selection==2)
{
printf("** please input the employee number:");
scanf("%d",index); /*读员工编员*/
if (index10) /*判断员工编号的范围*/
{
printf("** employee number is %d,",index);
printf("The salay is %d\n",employee[index]);
}
else
{
printf("## The error employee number!\n");
}
}
switch(selection)
{
case 1: /*选项1输出员工工资*/
break;
case 2: /*选项2修改员工工资*/
printf("please input newsalay :");
scanf("%d",newsalary); /*读取修改后的员工工资*/
employee [index] = newsalary;
break;
case 3: /*选项3;结束程序*/
exit (1);
break;
}
printf("\n");
}
getch();
return 0;
}
发布于 2022-07-17 21:06:22 回复
发布于 2022-07-17 18:06:10 回复
发布于 2022-07-17 11:59:45 回复
发布于 2022-07-17 10:55:43 回复
发布于 2022-07-17 21:23:30 回复