1)头文件
1.#include<stdio.h>,头文件stdio.hC语言标准输入输出函数库。
2.#include<stdlib.h>,头文件stdlib.hC语言实用工具函数库。
3.#include<windows.h>,头文件windows.h这是Windows平台下的系统库
#include<assert.h>,头文件,assert.h用来解决程序终止问题。(源于网络,在程序运行中需要一个结束程序的方法)
struct ITEM
{
int key;
int balue;
};
void additem(struct ITEM *itemptr)
{
assert(itemptr != NULL);
}
2)结构体
定义了一个结构体类型,结构体名为“book”。
结构体成员分别为
1.字符类型char,成员名为name,用来表示通讯录姓名。
2.字符类型char,成员名为office,用来表示通讯录的办公电话。
3.字符类型char,成员名为home,用来表示通讯录的家庭电话。
4.字符类型char,成员名为move,用来表示通讯录的移动电话。
5.字符类型char,成员名为sex,用来表示通讯录的性别。
6.字符类型char,成员名为cla,用来表示通讯录的分组。
定义一个结构体变量s[M];
struct book
{
char name[10];//姓名
char office[20];//办公电话
char home[20];//家庭电话
char move[20];//移动电话
char sex[10];//性别
char cla[10];//分组
}s[M];
(1)准备数据
建立数据文件,如下图2所示。
图2
(2)程序整体框架设计
思路分析:手机通讯录的信息存放在“JK0124.txt”文件中,在我的程序中并没有进行全局变量的定义,全是局部变量,也就是每个函数功能块都是单独的一个小程序。通过主函数进行调用,整个程序框架如下图3所示。
图3 系统框图
(3)主运行OPEN()函数和查阅信息refer()函数
思路分析:利用OPEN()函数调用各个功能模块。由于查询函数refer()和主运行函数的思路是一样的,都是先展示菜单部分,在使用swich选择结构进行选择,调用。所以下面以OPEN()函数进行详细说明。
第一步,先展示主菜单menu1(),根据用户键盘输入数字,判断并调用对应的功能函数。
void menu1()//主菜单
{
printf("_________________________________\n");
printf("| 手机通讯录操作系统 |\n");
printf("|_______________________________|\n");
printf("|*******************************|\n");
printf("|**********1.查询信息***********|\n");
printf("|**********2.修改数据***********|\n");
printf("|**********3.添加数据***********|\n");
printf("|**********4.删除数据***********|\n");
printf("|**********5.进行排序***********|\n");
printf("|**********6.退出系统***********|\n");
printf("|*******************************|\n");
printf("|_______________________________|\n");
}
第二步,根据用户键盘输入的数组,赋值给input。采用switch选择结构进行选择。并调用每个数字对应的函数功能块。
switch (input)
{
case 1:
refer();
break;
case 2:
modify();
break;
case 3:
AddData();
break;
case 4:
Delete();
break;
case 5:
ordering();
break;
case 6:
getout();
additem(NULL);
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
(4)作者信息Front()函数
思路分析:使用windows系统下的系统库SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_);用来设置控制台的颜色信息。
使用一个for运行来延迟程序的运行,在for循环中使用了整数后加U来解决整数长度过长问题。
最后使用system(“cls”);清除指令,清除控制台信息。
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色
printf("\n");
printf(" 手机通讯录系统\n");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);//设置绿色
printf("\n");
printf(" 作者:XXX\n");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);//设置蓝色
printf("\n");
printf(" QQ:2238265682\n");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);//设置红色和蓝色相加
printf("\n");
printf(" 请等待......");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
for(int i =0 ;i<=3000000000U;i++){
}
system("cls");
(5)查询函数部分。姓名查询refername()函数,分组查询referclass()函数,办公电话查询officephone()函数,家庭电话查询homephone()函数,移动电话查询movephone()函数。
思路分析:查询函数部分的代码和思路基本一样,这里以姓名查询为例进行思路分析。唯一不一样的地方就在于查找的信息不同,对结构体体类型中成员的引用的不一样,也就是s[i].name还是s[i].cla的不同。
第一步:从键盘获取用户输入的查找信息。
char nam[100];
printf("请输入你要查找的姓名->");
scanf("%s",nam);
第二步,使用字符操作函数strcmp(str1,str2)进行两个字符串的比较。如果两个字符串相同就输入这一整条信息,如果不一样就输出查无此人。
while(!feof(fp))
{
if(strcmp(nam,s[i].name)==0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
break;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此人!\n");
}
(6)修改数据部分modify()函数
思路分析:
第一步,既然需要修改数据,首先就要对数据进行查询,判断所要查询的数据是否存在,这个查询部分就和上面的查询函数就有点相识了。
while(!feof(fp))
{
if(strcmp(nam,s[i].name)==0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
break;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此人!\n");
第二步,查找到需要修改的信息后就要,对该数据进行修改,这里仍然要使用对字符串的操作函数,这里使用的是strcpy(str1,str2)字符串拷贝函数,将str2所指的字符串内容复制到str1所指的存储空间中,函数返回str1的值。
char num1[10];
printf("\n请输入你要修改的新姓名信息->");
scanf("%s",&num1);
strcpy(s[i].name,num1);
char num2[10];
printf("\n请输入你要修改的新办公电话信息->");
scanf("%s",&num2);
strcpy(s[i].office,num2);
char num3[10];
printf("\n请输入你要修改的新家庭电话信息->");
scanf("%s",&num3);
strcpy(s[i].home,num3);
char num4[10];
printf("\n请输入你要修改的新移动电话信息->");
scanf("%s",&num4);
strcpy(s[i].move,num4);
char num5[10];
printf("\n请输入你要修改的新性别信息->");
scanf("%s",&num5);
strcpy(s[i].sex,num5);
char num6[10];
printf("\n请输入你要修改的新分组信息->");
scanf("%s",&num6);
strcpy(s[i].cla,num6);
(7)添加数据AddData()函数
思路分析:添加数据,事实上和修改数据的思路一样,只是添加数据不需要进行判断了,直接在数组的最后加一行,进行数据输入就可以了。同样使用字符串操作函数strcpy()函数进行字符串的操作。
char num1[10];
printf("\n请输入你要添加的新姓名信息->");
scanf("%s",&num1);
strcpy(s[i].name,num1);
char num2[10];
printf("\n请输入你要添加的新办公电话信息->");
scanf("%s",&num2);
strcpy(s[i].office,num2);
char num3[10];
printf("\n请输入你要添加的新家庭电话信息->");
scanf("%s",&num3);
strcpy(s[i].home,num3);
char num4[10];
printf("\n请输入你要添加的新移动电话信息->");
scanf("%s",&num4);
strcpy(s[i].move,num4);
char num5[10];
printf("\n请输入你要添加的新性别信息->");
scanf("%s",&num5);
strcpy(s[i].sex,num5);
char num6[10];
printf("\n请输入你要添加的新分组信息->");
scanf("%s",&num6);
strcpy(s[i].cla,num6);
(8)删除数据Delete()函数
思路分析:删除数据事实上,就是将你要删除的数据替换掉就行了,也就是将所给的数据换成空字符串就行了。在删除数据中同样使用的是字符串操作函数strcpy(str1,str2),只是将这里的str2换成空字符串了。对于需要查找你要删除的信息的代码和添加数据已经修改数据一样都是一个字符查找操作。
strcpy(s[i].name," ");strcpy(s[i].office," ");strcpy(s[i].home," ");
strcpy(s[i].move," ");strcpy(s[i].sex," ");strcpy(s[i].cla," ");
(9)排序操作ordering()函数
思路分析:运用了一个排序的模板,这里用变量m记录最小的数组元素下标,先设m=i,然后通过循环来实现,循环变量n从最小开始,不断比较。用当前最小值(s[n].name)与(s[m].name)进行比较,如果s[n].name小于s[m].name,然后运用结构体变量t将s[n].name与s[m].name进行对换。
for(i = 0;i < j;i++ )
{
m = i;
for(int n = 1;n < i;n++)
{
if(strcmp(s[n].name,s[m].name)>0)
{
m = n;
}
t = s[m];
s[m] = s[n];
s[n] = t;
}
}
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<assert.h>
#define M 20
struct book
{
char name[10];//姓名
char office[20];//办公电话
char home[20];//家庭电话
char move[20];//移动电话
char sex[10];//性别
char cla[10];//分组
}s[M];
/
struct ITEM
{
int key;
int balue;
};
//
char title[100];
void OPEN();//总运行
void Front();//作者信息
void menu1();//主目录
void menu2();//查询目录
void refer();//查询页面
void getout();//退出程序
void input();//读取数据
void print();//输出数据
void refername();//根据姓名查询
void referclass();//根据分组类型查询
void officephone();//根据办公电话查询
void homephone();//根据办公电话查询
void movephone();//根据办公电话查询
void modify();//修改数据
void AddData();//添加数据
void Delete();//删除数据
void ordering();//进行排序
///
int main()
{
Front();
OPEN();
}
///
void Front()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色
printf("\n");
printf(" 手机通讯录系统\n");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);//设置绿色
printf("\n");
printf(" 作者:乾中权\n");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);//设置蓝色
printf("\n");
printf(" QQ:2238265682\n");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);//设置红色和蓝色相加
printf("\n");
printf(" 请等待......");
printf("\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
for(int i =0 ;i<=3000000000U;i++){
}
system("cls");
}
///
void getout()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);//设置蓝色
printf("\n");
printf("\n");
printf(" 你已退出程序,欢迎下次使用。 ");
printf("\n");
printf("\n");
for (int i = 0; i <= 3000000000U; i++){
}
}
void additem(struct ITEM *itemptr)
{
assert(itemptr != NULL);
}
/
void menu1()//主菜单
{
printf("_________________________________\n");
printf("| 手机通讯录操作系统 |\n");
printf("|_______________________________|\n");
printf("|*******************************|\n");
printf("|**********1.查询信息***********|\n");
printf("|**********2.修改数据***********|\n");
printf("|**********3.添加数据***********|\n");
printf("|**********4.删除数据***********|\n");
printf("|**********5.进行排序***********|\n");
printf("|**********6.退出系统***********|\n");
printf("|*******************************|\n");
printf("|_______________________________|\n");
}
void menu2()//查询菜单
{
printf(" _________________________________\n");
printf(" | 查询信息菜单 |\n");
printf(" |________________________________|\n");
printf(" |*******1.按姓名查询*************|\n");
printf(" |*******2.按分组查询*************|\n");
printf(" |*******3.按办公电话查询*********|\n");
printf(" |*******4.按家庭电话查询*********|\n");
printf(" |*******4.按移动电话查询*********|\n");
printf(" |*******6.显示全部信息***********|\n");
printf(" |*******0.返回上一级目录*********|\n");
printf(" |********************************|\n");
printf(" |________________________________|\n");
}
/
void refer()//refer查阅信息
{
int Q;
do
{
menu2();
printf("请选择功能->");
scanf("%d",&Q);
switch (Q)
{
case 1:
refername();
break;
case 2:
referclass();
break;
case 3:
officephone();
break;
case 4:
homephone();
break;
case 5:
movephone();
break;
case 6:
print();
break;
case 0:
OPEN();
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (Q);
}
//
void OPEN()//主运行
{
int input;
do
{
menu1();
printf("请选择功能—>");
scanf("%d",&input);
switch (input)
{
case 1:
refer();
break;
case 2:
modify();
break;
case 3:
AddData();
break;
case 4:
Delete();
break;
case 5:
ordering();
break;
case 6:
getout();
additem(NULL);
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
}
//
void input()//输入数据,查询所有数据
{
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
fgets(title,100,fp);
int i=0;
while (!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
i++;
}
fclose(fp);
}
//
void print()//输出所有数据
{
int i;
puts(title);
for(i=0;i<M;i++)
{
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
}
}
//
void refername()//按姓名进行查询
{
int k=0,i;
char nam[100];
printf("请输入你要查找的姓名->");
scanf("%s",nam);
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(nam,s[i].name)==0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
break;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
//
void referclass()//按分组进行查询
{
int k=0,i=0;
char nam[100];
printf("请输入你要查找的分组类型->");
scanf("%s",nam);
printf("\n已查到该信息,记录为:\n");
puts(title);
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(nam,s[i].cla)==0)
{
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此类型!\n");
}
fclose(fp);
}
void officephone()//按办公电话查询
{
int k=0,i;
char nam[100];
printf("请输入你要查找的办公电话->");
scanf("%s",nam);
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(nam,s[i].office)==0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
break;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
/
void homephone()//按家庭电话查询
{
int k=0,i;
char nam[100];
printf("请输入你要查找的家庭电话->");
scanf("%s",nam);
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(nam,s[i].home)==0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
break;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
///
void movephone()//按移动电话查询
{
int k=0,i;
char nam[100];
printf("请输入你要查找的移动电话->");
scanf("%s",nam);
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(nam,s[i].move)==0)
{
printf("\n已查到该信息,记录为:\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
k=1;
break;
}
i++;
}
if(k==0)
{
printf("\n对不起,查无此人!\n");
}
fclose(fp);
}
///
void modify()//修改数据
{
int m,k=0,i=0;
char namekey[10];
printf("请输入你要修改的通讯录姓名->");
scanf("%s",&namekey);
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp == NULL)
{
printf("文件打开失败!");
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(namekey,s[i].name)==0)
{
k=1;
break;
}
i++;
}
if (k==1)
{
printf("已经查到该姓名所对应的信息\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
printf("*********************\n");
printf("******1.确定修改******\n");
printf("******0.放弃修改******\n");
printf("*********************\n");
printf("请选择->");
scanf("%d",&m);
if(m==1)
{
char num1[10];
printf("\n请输入你要修改的新姓名信息->");
scanf("%s",&num1);
strcpy(s[i].name,num1);
char num2[10];
printf("\n请输入你要修改的新办公电话信息->");
scanf("%s",&num2);
strcpy(s[i].office,num2);
char num3[10];
printf("\n请输入你要修改的新家庭电话信息->");
scanf("%s",&num3);
strcpy(s[i].home,num3);
char num4[10];
printf("\n请输入你要修改的新移动电话信息->");
scanf("%s",&num4);
strcpy(s[i].move,num4);
char num5[10];
printf("\n请输入你要修改的新性别信息->");
scanf("%s",&num5);
strcpy(s[i].sex,num5);
char num6[10];
printf("\n请输入你要修改的新分组信息->");
scanf("%s",&num6);
strcpy(s[i].cla,num6);
printf("修改成功\n");
printf("修改后的通讯录信息如下\n");
print();
}
}
else
{
printf("查无此人,无法修改!");
}
fclose(fp);
}
void AddData()//添加数据
{
int i=0;
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp == NULL)
{
printf("文件打开失败!");
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
i++;
}
char num1[10];
printf("\n请输入你要添加的新姓名信息->");
scanf("%s",&num1);
strcpy(s[i].name,num1);
char num2[10];
printf("\n请输入你要添加的新办公电话信息->");
scanf("%s",&num2);
strcpy(s[i].office,num2);
char num3[10];
printf("\n请输入你要添加的新家庭电话信息->");
scanf("%s",&num3);
strcpy(s[i].home,num3);
char num4[10];
printf("\n请输入你要添加的新移动电话信息->");
scanf("%s",&num4);
strcpy(s[i].move,num4);
char num5[10];
printf("\n请输入你要添加的新性别信息->");
scanf("%s",&num5);
strcpy(s[i].sex,num5);
char num6[10];
printf("\n请输入你要添加的新分组信息->");
scanf("%s",&num6);
strcpy(s[i].cla,num6);
printf("添加成功\n");
printf("添加后的通讯录信息如下\n");
print();
fclose(fp);
}
///
void Delete()//删除数据
{
int m,k=0,i=0;
char namekey[10];
long a;
printf("请输入你要删除的通讯录姓名->");
scanf("%s",&namekey);
FILE *fp;
fp = fopen("JK0124.txt","a");
if (fp == NULL)
{
printf("文件打开失败!");
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
if(strcmp(namekey,s[i].name)==0)
{
k=1;
break;
}
i++;
}
if (k==1)
{
printf("已经查到该姓名所对应的信息\n");
puts(title);
printf("%-9s %16s %16s %16s %16s %16s\n",s[i].name,s[i].office,s[i].home,s[i].move,s[i].sex,s[i].cla);
printf("*********************\n");
printf("******1.确定删除******\n");
printf("******0.放弃删除******\n");
printf("*********************\n");
printf("请选择->");
scanf("%d",&m);
int n;
if(m==1)
{
for(n = i; n < M-1;n++)
{
strcpy(s[n].name,s[n+1].name);strcpy(s[n].office,s[n+1].office);strcpy(s[n].home,s[n+1].home);
strcpy(s[n].move,s[n+1].move);strcpy(s[n].sex,s[n+1].sex);strcpy(s[n].cla,s[n+1].cla);
}
/*strcpy(s[i].name," ");strcpy(s[i].office," ");strcpy(s[i].home," ");
strcpy(s[i].move," ");strcpy(s[i].sex," ");strcpy(s[i].cla," ");*/
printf("删除成功\n");
printf("删除后的通讯录信息如下\n");
print();
}
}
else
{
printf("查无此人,无法修改!");
}
fclose(fp);
}
///
void ordering()//选择法排序操作
{
int i=0,m,n,j=0;
struct book t;
FILE *fp;
fp = fopen("JK0124.txt","r");
if (fp == NULL)
{
printf("文件打开失败!");
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s\n",s[j].name,s[j].office,s[j].home,s[j].move,s[j].sex,s[j].cla);
j++;
}
for(i = 0;i < j;i++ )
{
m = i;
for( n = i+1;n < j;n++)
{
if(strcmp(s[n].name,s[m].name)>0)
{
m = n;
}
t = s[m];
s[m] = s[n];
s[n] = t;
}
}
print();
fclose(fp);
}
文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf
文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转
文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。
文章浏览阅读1.3k次。最重要的一点,一定是degbug的方式启动,不然热部署不会生效,注意,注意!_tomcat热部署
文章浏览阅读10w+次,点赞56次,收藏482次。html5 ,用css去修饰自己的个人主页代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xh..._个人主页源码
文章浏览阅读201次。开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区来源:开源最前线链接:https://github.com/svenstaro/gen..._程序员怎么上班摸鱼
文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小
文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码
文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。 北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些
文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node
文章浏览阅读775次。当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。_c语言ignoring return value
文章浏览阅读9.6k次。十四五规划下,数据安全成为国家、社会发展面临的重要议题,《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》已陆续施行。如何做好“数据安全建设”是数字时代的必答题。_数字医疗服务保障方案