C语言,memcpy函数的作用,最好再给个小程序~

C语言,memcpy函数的作用,最好再给个小程序~,第1张

函数名: memcpy

功 能: 从源source中拷贝n个字节到目标destin中

用 法: void memcpy(void destin, void source, unsigned n);

程序例:

#include <stdioh>

#include <stringh>

int main(void)

{

char src[] = "";

char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";

char ptr;

printf("destination before memcpy: %s\n", dest);

ptr = memcpy(dest, src, strlen(src));

if (ptr)

printf("destination after memcpy: %s\n", dest);

else

printf("memcpy failed\n");

return 0;

}

一、Java语言特点

Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。

具体来说,它具有如下特性:

简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。

下面我们将重点介绍Java语言的面向对象、平台无关、分布式、多线程、可靠和安全等特性。

1面向对象

面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。

所有面向对象编程语言都支持三个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互 *** 作。

多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。运算符重载(operatoroverload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。

继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的“父亲”,而这些子实体则是汽车的“孩子”。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。

2�平台无关性

Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。

Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体 *** 作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。

另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。)JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。另外,Java采用的是基于IEEE标准的数据类型。通过JVM保证数据类型的一致性,也确保了Java的平台无关性。

Java的平台无关性具有深远意义。首先,它使得编程人员所梦寐以求的事情(开发一次软件在任意平台上运行)变成事实,这将大大加快和促进软件产品的开发。其次Java的平台无关性正好迎合了“网络计算机”思想。如果大量常用的应用软件(如字处理软件等)都用Java重新编写,并且放在某个Internet服务器上,那么具有NC的用户将不需要占用大量空间安装软件,他们只需要一个

Java解释器,每当需要使用某种应用软件时,下载该软件的字节代码即可,运行结果也可以发回服务器。目前,已有数家公司开始使用这种新型的计算模式构筑自己的企业信息系统。

3�分布式

分布式包括数据分布和 *** 作分布。数据分布是指数据可以分散在网络的不同主机上, *** 作分布是指把一个计算分散在不同主机上处理。

Java支持>

服务器问题。

后台内存溢出报错了。类似高并发的场景都有可能出现这种情况,错开高峰期,等一段时间再刷新试试。估计是服务器的问题,建议等等再试

腾讯微信(faq)是一种更快速的短邮,具有跨平台沟通、显示实时输入状态等功能,与传统的短信沟通方式相比,更灵活、智能,且节省资费。

设计课题一:班级成绩管理系统

一、 问题描述:

对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等 *** 作的管理。

二、功能要求:

1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。

2、本系统显示这样的菜单:

请选择系统功能项:

a、 成绩录入

b、 成绩显示

c、 成绩保存

d、 成绩排序

e、 成绩修改(要求先输入密码)

f、 成绩统计

(1) 显示每门课程成绩最高的学生的基本信息

(2) 显示每门课程的平均成绩

(3) 显示超过某门课程平均成绩的学生人数

g、 退出系统

3、执行一个具体的功能之后,程序将重新显示菜单。

4、将学生成绩保存到文件中。

三、算法提示:

1、数据结构:结构体类型数组。

2、数据库结构:下表构成该系统的基本数据库。

姓名 学号 课程名称1 课程名称2 ●●●●●●

char Char float float

四、测试数据:

学生人数N=10

课程门数M=4

课程名:数学、语文、英语、政治

五、其它

对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。

问题补充:

今天谁能给我答案啊!!!!!!!急急!!!!!!!

提问者: 342123465 - 一级

最佳答案

C语言课程设计报告—班级成绩管理系统

需要分析:

学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的 *** 作。

根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float)再加上系统功能上的要求每一学生的信息还要总分和名次等。所以自然的想到要用结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的 *** 作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。

各函数的功能:

概要设计:

程序的模块组成:

主 函 数: int main()

新建函数:STUDENT init()

输入函数 :STUDENT create()

显示函数: void print(STUDENT head)

删除函数: STUDENT delete(STUDENT head)

按名字寻找函数: void lookup(STUDENT head)

保存函数: void save(STUDENT head)

按总分排序函数: STUDENT sort(STUDENT head)

计算总分和均分函数: void computer(STUDENT h)

修改函数: STUDENT Modify(STUDENT head,STUDENT new)

按学号排序函数: STUDENT index(STUDENT h)

菜单函数:int menu_select()

各个函数的主要功能:

输入函数: 随时输入数据。

菜单函数:显示系统主菜单。

显示函数: 显示所有学生的信息。

寻找函数: 方便学生查找自己的成绩。

删除函数: 删除某学生的信息。

排序函数: 按总成绩排序。

按学号排序函数: 按学号排序。

插入函数: 可以插入新的信息。

保存函数: 保存好学生成绩,以免丢失。

统计函数:

l 显示每门课程成绩最高的学生的基本信息。

l 显示每门课程的平均成绩。

l 显示超过某门课程平均成绩的学生人数。

课题的功能模块的划分:

开始

菜单界面

功能选择

初始化函数

输入学生信息

删除学生信息

显示学生信息

查找学生信息

按成绩排序

保存到文件

从文件读数据

插入学生成绩

分类合计

退出系统

结束

详细设计: 整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:

主函数 main()

利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

菜单选择函数 int menu_select()

这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,返回菜单。

代码设计: 初始化函数 STUDENT init()

这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!

输入记录函数 STUDENT create() 这是一个无参函数,用来执行学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个链表头的指针指向一下个学生的信息插在表头。

N-S流程图如下:

head=NULL无条件循环

指针p指向新开辟的单元

指针p是否为空

是 否

输入学号p->num

输出 p->num是否为@

内存 是 否

溢出 输入姓名p->name

停止 for(i=0;i<3;i++)

输入 输入成绩

返回 p->sum=s;

菜单 p->average=(float)s/3;

显示记录函数 void print(STUDENT head)

这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。

算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。

N-S流程图如下:

p=head,使指向第一个结点

输出p所指向的结点

p指向一下个结点

当p指的不是表尾

程序调试:

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。最后还是老师帮我帮我们找到了问题的所在——for 循环的次超过了链表中结点的数量。再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。又如:在设计修改学生信息时的密密码时。当用户发现输入密码错误按了退格键后,因为“”并没有消去。导致用户再次按退格键,又出现前面的情况。最终导致输入密码错误。所以用了两次退格键:

在对链表 *** 作时,要特别链表指针的移动(p=p->next)和链表尾的判断 (p= =NULL)。没有指针的移动,就很容易出现死循环。而在运行过程中不能控制。所以你就会认为是死机。如果没有链表尾的判断。就会在运行过程出现想不到的错误。如:在显示链表信息时,后面就会出现乱码。

一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

予我耐心解答的老师和同学,是他们为我小程序的成功起到了关键性的作用,那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。

回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。

本次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。

但我出总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。

2、把分解出来的子任务,做给一个相对独立的模块。

3、在设计一个模块之前,要简单构想一下总界面的显视情况。

4、针对构想出来的界面进行程序的编写。

最后,感谢老师您对我的指导和从百忙中抽空看我的设计,谢谢!

附件:

源程序:

#include "stdioh" /I/O函数/

#include "stdlibh" /其它说明/

#include "stringh" /字符串函数/

#include "conioh" /屏幕 *** 作函数/

#include "memh" /内存 *** 作函数/

#include "ctypeh" /字符 *** 作函数/

#include "alloch" /动态地址分配函数/

#include "dosh"

#define N 4 /定义常数/

typedef struct z1 /定义数据结构/

{

char no[12];

char name[20];

int score[N];

float sum;

float average;

int order;

struct z1 next;

}STUDENT;

/以下是函数原型/

STUDENT init(); /初始化函数/

STUDENT create(); /创建链表/

STUDENT delete(STUDENT h); /删除记录/

void print(STUDENT h); / 显示所有记录/

void lookup(STUDENT h); /查找/

void save(STUDENT h); /保存/

STUDENT load(); /读入记录/

void computer(STUDENT h); /计算总分和均分/

STUDENT Modify(STUDENT h); /修改记录/

void append(); /追加记录/

STUDENT sort(STUDENT h); /按总分排序/

STUDENT index(STUDENT h); /按学号排序/

int menu_select(); /菜单函数/

/主函数开始/

main()

{

int i;

STUDENT head; /链表定义头指针/

printf("\n\n\n\n\n\n\n\n\n");

printf(" \n");

printf(" \n");

printf(" \n" );

printf(" \n");

printf(" \n");

printf("\n");

printf("\n");

printf("\n");

sleep(2);

head=init(); /初始化链表/

clrscr(); /清屏/

for(;;) /无限循环/

{

switch(menu_select()) /调用主菜单函数,返回值整数作开关语句的条件/

{ /值不同,执行的函数不同,break 不能省略/

case 0:head=init();break; /执行初始化/

case 1:head=create();break; /创建链表/

case 2:print(head);break; /显示全部记录/

case 3:head=delete(head);break; /删除记录/

case 4:lookup(head);break; /按名字查找记录/

case 5:save(head);break; /保存文件/

case 6:head=load(); break; /读文件/

case 7:computer(head);break; /计算总分和均分/

case 8:head=Modify(head); break; /修改记录,一般会插在表尾/

case 9:head=sort(head);break; /按部分排序/

case 10:append();break; /追加记录/

case 11:head=index(head);break; /按学号排序/

case 12: exit(0); /如菜单返回值为12程序结束/

}

}

}

/菜单函数,返回值为整数/

menu_select()

{

char menu[]={"MENU", /定义菜单字符串数组/

" 00 init list", /初始化/

" 01 Enter list", /输入记录/

" 02 print list ", /显示单链表中所有记录/

" 03 Delete a record from list", /从表中删除记录/

" 04 Search record on name", /按照姓名查找记录/

" 05 Save the file", /将单链表中记录保存到文件中/

" 06 Load the file", /从文件中读入记录/

" 07 compute the score", /计算所有学生的总分和均分/

" 08 Modify an information ", /修改某学号的信息/

" 09 sort to make new file", /排序/

" 10 append record to file", /追加记录到文件中/

" 11 index on nomber", /按学号排序/

" 12 Quit"}; /退出/

char s[3]; /以字符形式保存选择号/

int c,i; /定义整形变量/

gotoxy(1,1); /移动光标/

textcolor(YELLOW); /设置文本显示颜色为**/

textbackground(BLUE); /设置背景颜色为蓝色/

gotoxy(10,2); /移动光标/

putch(0xc9); /输出左上角边框┏/

for(i=1;i<44;i++)

putch(0xcd); /输出上边框水平线/

putch(0xbb); /输出右上角边框 ┓/

for(i=3;i<20;i++)

{

gotoxy(10,i);putch(0xba); /输出左垂直线/

gotoxy(54,i);putch(0xba); /输出右垂直线/

}

gotoxy(10,20);putch(0xc8); /输出左上角边框┗/

for(i=1;i<44;i++)

putch(0xcd); /输出下边框水平线/

putch(0xbc); /输出右下角边框┛/

window(11,3,53,19); / 制作显示菜单的窗口,大小根据菜单条数设计/

clrscr(); /清屏/

for(i=0;i<16;i++) /输出主菜单数组/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK); /设置背景颜色为黑色/

window(1,1,80,25); /恢复原窗口大小/

gotoxy(10,21); /移动光标/

do{printf("\n make by wenwei");

printf("\n Enter you choice(0~13):"); /在菜单窗口外显示提示信息/

scanf("%s",s); /输入选择项/

c=atoi(s); /将输入的字符串转化为整形数/

}while(c<0||c>14); /选择项不在0~14之间重输/

return c; /返回选择项,主程序根据该数调用相应的函数/

}

STUDENT init()

{ clrscr();

return NULL;

}

/创建链表/

STUDENT create()

{

int i; int s;

STUDENT h=NULL,info; / STUDENT指向结构体的指针/

clrscr();

for(;;)

{

info=(STUDENT )malloc(sizeof(STUDENT)); /申请空间/

if(!info) /如果指针info为空/

{

printf("\nout of memory"); /输出内存溢出/

return NULL; /返回空指针/

}

inputs("enter no:",info->no,11); /输入学号并校验/

if(info->no[0]=='@') { clrscr();break; } /如果学号首字符为@则结束输入,清屏后返回/

inputs("enter name:",info->name,15); /输入姓名,并进行校验/

printf("please input %d score \n",N); /提示开始输入成绩/

s=0; /计算每个学生的总分,初值为0/

for(i=0;i<N;i++) /N门课程循环N次/

{

do{

printf("score%d:",i+1); /提示输入第几门课程/

scanf("%d",&info->score[i]); /输入成绩/

if(info->score[i]>100||info->score[i]<0) /确保成绩在0~100之间/

printf("bad data,repeat input\n"); /出错提示信息/

}while(info->score[i]>100||info->score[i]<0);

s=s+info->score[i]; /累加各门课程成绩/

}

info->sum=s; /将总分保存/

info->average=(float)s/N; /求出平均值/

info->order=0; /未排序前此值为0/

info->next=h; /将头结点做为新输入结点的后继结点/

h=info; /新输入结点为新的头结点/

clrscr();

}

return(h); /返回头指针/

}

/输入字符串,并进行长度验证/

inputs(char prompt, char s, int count)

{

char p[255];

do{

printf(prompt); /显示提示信息/

scanf("%s",p); /输入字符串/

if(strlen(p)>count)printf("\n too long! \n"); /进行长度校验,超过count值重输入/

}while(strlen(p)>count);

strcpy(s,p); /将输入的字符串拷贝到字符串s中/

}

/输出链表中结点信息/

void print(STUDENT h)

{

int i=0; / 统计记录条数/

STUDENT p; /移动指针/

clrscr(); /清屏/

p=h; /初值为头指针/

printf("\n\n\nSTUDENT\n");

printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");

while(p!=NULL) /只要p不是尾结点,就输出记录/

{

i++;

printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %62f | %62f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);

p=p->next;

}

printf("end\n");

getch(); /输入任一键返回主菜单/

clrscr(); /清屏/

}

/删除记录/

STUDENT delete(STUDENT h)

{

STUDENT p,q; /p为查找到要删除的结点指针,q为其前驱指针/

char s[12]; /存放学号/

char pass="wenwei28";

char a[20],b=NULL;

int i=0;

clrscr();

printf("Input your password:");

while((i<20)&&(b!='\r'))

{ b=getch(); /无回显输入/

if(b==8)

{ if(i>0)

{a[--i]=NULL;

putchar(8); /退格键/

putchar(' '); /以空格代替/

putchar(8);

}

else putchar(7); /没有任何字符的退格,响铃警告/

}

else if(b!='\r')

{ a[i++]=b; /只要不是退格和回车就接受/

putchar('');

}

else

{a[i]=NULL; break; /密码输入完了,记得加个NULL到后面/

}

}

if(strcmp(a,pass)!=0)

{clrscr();

printf("Password is mistake Tow seconds to return!");

sleep(2);clrscr();return h;

}

else {printf("Password is OK! Welcome to come!"); sleep(3);

}

clrscr(); /清屏/

printf("please deleted no\n"); /显示提示信息/

scanf("%s",s); /输入要删除记录的学号/

q=p=h; /给q和p赋初值头指针/

while(strcmp(p->no,s)&&p!=NULL) /当记录的学号不是要找的,或指针不为空时/

{

q=p; /将p指针值赋给q作为p的前驱指针/

p=p->next; /将p指针指向下一条记录/

}

if(p==NULL) /如果p为空,说明链表中没有该结点/

{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}

else /p不为空,显示找到的记录信息/

{

printf("have found\n");

printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");

printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %62f | %6-52f | %3d |\n", p->no,

p->name,p->score[0],p->score[1],p->score[ q=p; /保存当前结点的指针,作为下一结点的前驱/

p=p->next; /指针后移,新读入数据链到当前表尾/

}

q->next=NULL; /最后一个结点的后继指针为空/

fclose(fp); /关闭文件/

printf("---You have success read data from file!!!---\n");

getch(); /按任意键返回主菜单/

clrscr();

return h; /返回头指针/

}

/成绩统计/

void computer(STUDENT h)

{

STUDENT p,t,q; /定义移动指针/

float saverage[N]={0}; /均分初值为0/

int i;

clrscr();

for (i=0;i<N;i++)

{ int n=0,j=0; /保存记录条数初值为0/

long s=0; /总分初值为0/

p=h; /从头指针开始/

while(p!=NULL) /当p不为空时处理/

{

s+=p->score[i]; /累加总分/

j++; /统计记录条数/

p=p->next; /指针后移/

h; /返回头指针

}

运行Java程序(SWING或SWT的桌面程序)可以直接执行。class文件或将所有的。class文件及相关的其他文件压缩成。jar文件,然后使用javaw -jar myjar来运行程序(其中myjar是一个jar文件名,可以是任何指定的jar文件)。但在windows下,用户习惯直接运行一个exe来执行程序。在网上有很多程序可以将myjar或。class文件直接转换成exe文件。但很多都是将jar或。class文件放到exe里成,这样不太方便。有些工具,如javalauncher可以使用一个exe程序(用c语言写的)来调用jar文件。但有时需要在运行程序之间做些其他的工具,例如,在客户端动态从服务端下载最新版本的程序。因此,在本文将使用delphi2009实现一个简单的可以调用jar文件的程序,读者可以对这个程序进行任何扩展,本文还提供了该程序的源代码和exe文件。

使用delphi建立一个VCL工程。在本程序中不需要form,因此,可以将默认生成的form删除。实际上,我们只需要调用ShellExecute方法就可以通过javaw命令来执行jar文件,代码如下:

shellexecute(GetActiveWindow, 'open','javaw', '-jar myjar', '', SW_NORMAL);

其中GetActiveWindow方法获得当前窗口的句柄。在本程序中使用了一个configini文件来指定要执行的jar文件,实现的完整代码如下:

program launcher;

uses

Forms,

windows,shellapi, inifiles, sysUtils;

{$R res}

var

ini: tinifile;

JarFile: String;

begin

ApplicationInitialize;

ini := tinifileCreate(extractfilepath(applicationExeName) + 'configini');

JarFile := iniReadString('config', 'JarFile', '');

shellexecute(GetActiveWindow, 'open','javaw', PWideChar('-jar ' + JarFile), '', SW_NORMAL);

iniFree;

ApplicationRun;

end

在和exe相同的目录下建立一个configini文件,内容如下:

[config]

JarFile = jars\swtjar

其中swtjar文件是执行的jar文件,要放在当前目录的jars目录中。现在的目录结果如下:

launcherexe

configini

jars\swtjar

其中launcherexe和configini也被包含在本文的下载文件中。读者只需要修改configini文件中的相应的jar文件名即可。也可以将launcherexe改成其它的文件名。还有就是要修改launcherexe文件的图标,可以直接在delphi2009(低版本的delphi也可以,最好70以上)中改,也可以找一些编辑二进制资源的程序,直接打开launcherexe文件,修改其中的图标。

当然,本程序也可以使用任何可生成原生可执行文件的编程语言开发,如C、C++等。

OK,现在就可以通过双击launcherexe文件来调用jar包了。要想对launcher进行扩展,就直接修改源代码吧。其实这个实现是非常非常地简单!!!

iPhone手机在拥有足够内存,进微信却提示“存储空间不足”是由于微信软件缓存过多导致的。

1、解锁iPhone到桌面屏幕,并在应用程序中找到[微信]打开它。

2、进入[微信]程序主页后,选择[设置]打开该功能。

3、进入“设置”选项列表后,打开“一般”设置。

4、在[通用]设置菜单栏底部找到[内存空间]。

5、在[存储空间]管理页面,找到[缓存]右侧的“清理”按钮。(微信警报的“内存溢出”阈值是应用程序缓存,而不是手机自己的内存。)

6、按下“清理”按钮后,系统将自动清理[微信]应用的“存储空间”。清洗后,解决了“存储空间不足”的问题。

以上就是关于C语言,memcpy函数的作用,最好再给个小程序~全部的内容,包括:C语言,memcpy函数的作用,最好再给个小程序~、Java语言的特点、微信小程序调用卡管报错是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10218642.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存