一 作业信息

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
作业目标 理解作业内容,完成编译
学号 3180701316

二 题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

三 代码提交

`#include<stdio.h>

include<string.h>

include<stdlib.h>

include<conio.h>

include<windows.h>

include<time.h>

define N sizeof(struct Account)

define M sizeof(struct Money)

struct Account //账户信息

{

char name[10]; //账号昵称

char password[18]; //密码

struct Account *next; //指针域

};

typedef struct Account Acc;

typedef Acc *Accp;

struct Money //钱

{

float money;

char time[10];//时间

char date[10];//日期

struct Money *next;

};

typedef struct Money mon;

typedef mon *monp;

//函数声明区

void HideCursor(); //隐藏光标

void toxy(int x, int y); //将光标移动到X,Y坐标处

void color(short x); //设置颜色

void menu(); //菜单

Accp ff(); //将文件中的内容读出

void signin(); //登陆或注册

void login(); // 注册账号

void logon(); // 账号登陆

void amend_password(); //修改密码

void add_money(); //存款

void find_money(); //查询

void get_money(); //取款

void transfer_money(); //转账

void save_account(Accp p); //将p所指向的内容存入文件中

void save_money(monp p); //将p所指向的内容存入文件中

float Sum(); //求余额

void over(); //退出系统

void list(); //账单明细

monp ss();

char _name[20],_password[18]; //全局变量记住当前登陆账户

void color(short x)

{

if(x>=0&&x<=15)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);

}

else

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);

}

}

void HideCursor() //隐藏光标

{

CONSOLE_CURSOR_INFO cursor_info = {1, 0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

void toxy(int x, int y) //将光标移动到X,Y坐标处

{

COORD pos = { x , y };

HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(Out, pos);

}

Accp ff() //将存账号的文件里的内容输出到链表中

{

FILE *fp; //文件指针

int n=0;

Accp head=NULL;

Accp p2,p;

fp=fopen("account","a+"); //以只读的方式打开文件

if(fpNULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(Accp)malloc(N); //向内存申请一段空间

fread(p,N,1,fp); //将fp所指向的文件中的内容赋给p

if(n1)

{

head=p;

p2=p;

}

else //创建链表

{

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

fclose(fp); //关闭文件

return head; //返回头指针

}

void menu() //菜单

{

system("cls"); //清屏

do{

color(14); //看着舒服的颜色

char t;

toxy(50,5);

printf(" 自动存取款机模拟系统");

toxy(50,6);

printf("当前账户为:%s",_name);

toxy(48,8);

printf("| 1.取款 |");

toxy(48,10);

printf("| 2.转账 |");

toxy(48,12);

printf("| 3.余额 |");

toxy(48,14);

printf("| 4.明细 |");

toxy(48,16);

printf("| 5.存款 |");

toxy(48,18);

printf("| 6.修改密码 |");

toxy(48,20);

printf("| 7.退出系统 |");

t=getch(); //利用不回显函数,输入t,可以不用手动按回车键

switch(t)

{

case '1':get_money();break;

case '2':transfer_money();break;

case '3':find_money();break;

case '4':list();break;

case '5':add_money();break;

case '6':amend_password();break;

case '7':over();break;

default :;break;

}

}while(1); //永远为真

}

void signin() //登陆或注册

{

system("cls");

color(12);

HideCursor(); //隐藏光标

char t;

toxy(50,5);

printf("自动存取款机模拟系统");

toxy(44,8);

printf("----------------------------");

toxy(45,10);

printf("请输入(1:登陆;2:注册.)");

toxy(44,12);

printf("----------------------------");

while(1)

{

t=getch();

switch(t)

{

case '1':logon();break;

case '2':login();break;

default :break;

}

}

}

void logon() // 账号登陆

{

system("cls"); //清屏

color(10); //设置颜色

Accp p,head;

head=ff(); //调用函数 ,返回值为头结点的指针

do{

p=head;

char t,c,k;

int i=0;;

toxy(50,5);

printf("自动存取款机模拟系统");

toxy(45,6);

printf("***********************");

toxy(45,8);

printf(" 登陆状态 ");

toxy(45,10);

printf("
请输入您的账号:");

gets(_name);

toxy(45,12);

printf("
请输入您的密码:");

for(; //此处为输入密码不回显操作

{

k=getch(); //输入k

if(k'\r') //如果输入k为回车,则跳出循环

{

break;

}

else if(k'\b') //如果输入k为删除键

{

if(i>0) //如若密码还没完全删除

{

printf("\b");

printf(" ");

printf("\b");

i--;

}

}

else //如果输入的k既不是删除键,也不是回车键

{

_password[i]=k; //把k的值赋给_password[i];

printf("
"); //输出
号,保护用户隐私

i++; //密码位数加1

}

}

_password[i]='\0';

while(p!=NULL&&strcmp(p->name,_name)!=0) //遍历链表,寻找当前输入的账户的账号

{

p=p->next;

}

if(p!=NULL) //如果p不为空

{

if(strcmp(p->password,_password)0) //如果输入的密码正确

{

toxy(48,16);

printf("正在登陆....");

Sleep(500); //暂停0.5秒

system("cls");

color(10);

toxy(48,10);

printf("登陆成功!");

break; //跳出循环

}

else //如果输入的密码错误

{

toxy(48,16);

printf("正在登陆....");

Sleep(500);

system("cls");

color(10);

toxy(46,8);

printf("-------------------------");

toxy(46,9);

printf("| |");

toxy(46,10);

printf("| 密码错误!是否继续? |");

toxy(46,12);

printf("| 1.是 2.否 |");

toxy(46,13);

printf("| |");

toxy(46,14);

printf("-------------------------");

while(1)

{

t=getch(); //输入t

if(t'1')

{

system("cls"); //清屏

color(10);

break;

}

else if(t'2') //如果输入t为n,进入开始界面

{

signin();break;

}

}

}

}

else //如果p为空,即输入的账号不正确

{

toxy(48,16);

printf("正在登陆....");

Sleep(500);

system("cls");

color(10);

toxy(46,8);

printf("-------------------------");

toxy(46,9);

printf("| |");

toxy(46,10);

printf("| 账号错误!是否继续? |");

toxy(46,11);

printf("| |");

toxy(46,12);

printf("| 1.是 2.否 |");

toxy(46,13);

printf("| |");

toxy(46,14);

printf("-------------------------");

while(1) //死循环防止其他按键干扰

{

c=getch();

if(c'1')

{

system("cls");

color(10);

break;

}

else if(c=='2')

{

signin();break;

}

}

}

}while(1); //永远为真

Sleep(500); //暂停0.5秒

menu(); //账号密码均正确,进入主菜单

}

void login() //注册账号

{

system("cls");
color(10);
Accp p1;
p1=(Accp)malloc(N); //向内存申请一段空间
do{
color(10);
char name[20],password[18],againpassword[18],c,k;
int i=0;;
toxy(50,5);
printf("自动存取款机模拟系统");
toxy(45,6);
printf("**************************");
toxy(45,8);
printf(" 正在注册");
toxy(45,10);
printf("* 请输入账号:");
gets(name);
toxy(45,12);
printf("* 请输入密码:");
for(;;) //此处为输入密码不回显操作
{
k=getch(); //输入k
if(k=='\r') //如果输入k为回车,则跳出循环
{
break;
}
else if(k=='\b') //如果输入k为删除键
{
if(i>0) //如若密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
password[i]=k; //把k的值赋给_password[i];
printf("*"); //输出*号,保护用户隐私
i++; //密码位数加1
}
}
password[i]='\0';
i=0;
toxy(45,14);
printf("* 请确认您的密码:");
for(;;) //此处为输入密码不回显操作
{
k=getch(); //输入k
if(k=='\r') //如果输入k为回车,则跳出循环
{
break;
}
else if(k=='\b') //如果输入k为删除键
{
if(i>0) //如若密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
againpassword[i]=k; //把k的值赋给_password[i];
printf("*"); //输出*号,保护用户隐私
i++; //密码位数加1
}
}
againpassword[i]='\0';
if(strcmp(password,againpassword)==0) //如果输入的两次密码均正确
{
strcpy(p1->name,name);
strcpy(p1->password,password);
toxy(48,16);
printf("正在注册....");
Sleep(500);
system("cls");
color(12);
toxy(48,10);
printf("注册成功!");
Sleep(500); //暂停0.5秒
break; //跳出循环
}
else //如果输入的两次密码不同
{
toxy(48,16);
printf("正在注册....");
Sleep(500);
system("cls");
color(12);
toxy(46,8);
printf("-----------------------------");
toxy(46,9);
printf("| |");
toxy(46,10);
printf("| 注册失败!是否继续注册? |");
toxy(46,11);
printf("| |");
toxy(46,12);
printf("| 1.是 2.否 |");
toxy(46,13);
printf("| |");
toxy(46,14);
printf("-----------------------------");
while(1)
{
c=getch();
if(c=='1')
{
system("cls");
color(12);
break;
}
else if(c=='2')
{
signin();
break;
}
}
}
}while(1); //永远为真
save_account(p1); //调用函数,将p1所指向的内容存储到文件中
toxy(48,12);
printf("正在自动为您登陆....");
Sleep(500);
menu(); //注册成功后进入主菜单

}

/修改密码

方法比较笨,这里是先将储存在文件中的账户信息

输出在一个链表中,遍历链表,寻找当前登陆的账户账号,修改该节点的p->password,

再将修改后的链表存到文件中,需要注意的是修改之后再存到文件中需要将该文件中的内容

清空
/

void amend_password() //修改密码

{

system("cls"); //清屏

color(14); //看着舒服的颜色

HideCursor();

Accp p,head; //隐藏光标,看着更舒服

head=ff();

FILE fp;

do

{

color(14);

HideCursor(); //隐藏光标,看着舒服

p=head;

char password[18],newpassword[18],t,k;

int i=0;

toxy(50,5); //将光标移动到坐标为(50,5)的位置

printf("自动存取款机模拟系统");

toxy(50,8);

printf("修改密码");

toxy(48,10);

printf("请输入旧密码:");

for(; //此处为输入密码不回显操作

{

k=getch(); //输入k

if(k'\r') //如果输入k为回车,则跳出循环

{

break;

}

else if(k'\b') //如果输入k为删除键

{

if(i>0) //如若密码还没完全删除

{

printf("\b");

printf(" ");

printf("\b");

i--;

}

}

else //如果输入的k既不是删除键,也不是回车键

{

password[i]=k; //把k的值赋给_password[i];

printf("
"); //输出号,保护用户隐私

i++; //密码位数加1

}

}

password[i]='\0';

i=0;

toxy(48,12);

printf("请输入新密码:");

for(; //此处为输入密码不回显操作

{

k=getch(); //输入k

if(k'\r') //如果输入k为回车,则跳出循环

{

break;

}

else if(k'\b') //如果输入k为删除键

{

if(i>0) //如若密码还没完全删除

{

printf("\b");

printf(" ");

printf("\b");

i--;

}

}

else //如果输入的k既不是删除键,也不是回车键

{

newpassword[i]=k; //把k的值赋给_password[i];

printf("
"); //输出*号,保护用户隐私

i++; //密码位数加1

}

}

newpassword[i]='\0';

while(p!=NULL&&strcmp(p->name,_name)!=0)//遍历链表,寻找当前登陆账户的账号

{

p=p->next;

}

if(p!=NULL) //如果p不为空

{

if(strcmp(p->password,password)0) //如果旧密码输入正确

{

strcpy(p->password,newpassword); //将旧密码改为新密码

break; //跳出循环

}

else //如果旧密码输入错误

{

system("cls");

color(12);

toxy(46,8);

printf("--------------------------");

toxy(46,9);

printf("| |");

toxy(46,10);

printf("| 密码错误!是否继续? |");

toxy(46,11);

printf("| |");

toxy(46,12);

printf("| 1.是 2.否 |");

toxy(46,13);

printf("| |");

toxy(46,14);

printf("--------------------------");

while(1)

{

t=getch(); //输入t

if(t'1')

{

system("cls");

color(12);

break;

}

else if(t'2')

menu();

}

}

}

}while(1); //永远为真

p=head->next; //使p指向第二个结点

fp=fopen("account","w"); //先清空原文件内容再将修改后的信息写入文件

if(fpNULL)

{

printf("cannot open file\n");

}

if(fwrite(head,N,1,fp)!=1) //将head所指向的数据写入fp所指向的文件

{

printf("file write error\n");

}

fclose(fp); //关闭文件

fp=fopen("account","a"); // 打开account文件,方式为追加

while(p!=NULL) //p不为空就执行循环体

{

if(fwrite(p,N,1,fp)!=1) //将p所指向的1个大小为N的数据结构写入fp所指向的文件

{

printf("file write error\n");

}

p=p->next; //使p指向下一个结点

}

fclose(fp); //关闭文件

toxy(48,14);

printf("修改成功!正在跳转...");

Sleep(500); //暂停0.5秒

}

void save_account(Accp p1) //将p1所指向的内容存储到文件中

{

FILE *fp; //文件指针

fp=fopen("account","a"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p1,N,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

void add_money() //存款

{

do

{

system("cls"); //清屏

color(11);

monp p;

char t;

char time[10],date[10];

p=(monp)malloc(M); //向内存申请一段空间

toxy(48,8);

printf("请输入您需要存入的金额:");

scanf("%f",&p->money);

getchar(); //吸收回车键

_tzset();

_strtime(time);

strcpy(p->time,time);

_strdate(date);

strcpy(p->date,date);

toxy(48,10);

printf("正在操作,请稍后....");

Sleep(500);

save_money(p);

system("cls");

toxy(46,8);

printf("-------------------------");

toxy(46,9);

printf("| |");

toxy(46,10);

printf("| 存入成功!是否继续? |");

toxy(46,12);

printf("| 1.是 2.否 |");

toxy(46,13);

printf("| |");

toxy(46,14);

printf("-------------------------");

while(1)

{

t=getch();

if(t'1')

{

break;

}

else if(t'2')

{

menu();

}

}

}while(1);

}

void find_money() //查询余额

{

system("cls");

color(13);

float sum=0;

sum=Sum();

toxy(46,12);

printf("余额为:%f",sum);

toxy(46,16);

printf("按任意键回到主菜单");

getch();

menu();

}

void get_money() //取款

{

do

{

system("cls");

color(11);

monp p;

float money,sum;

char t;

char time[10],date[10];

toxy(46,12);

printf("请输入您要取的金额:");

scanf("%f",&money);

getchar();//吸收回车键

sum=Sum();

if(money>sum) //如果要取的金额大于余额

{

toxy(46,14);

printf("余额不足,请重新输入!");

Sleep(500);

continue; //结束本次循环

}

p=(monp)malloc(M); //向内存申请一段空间

_tzset();

_strtime(time);

strcpy(p->time,time);

_strdate(date);

strcpy(p->date,date);

p->money=-money;

save_money(p);

toxy(46,14);

printf("正在操作,请稍后....");

Sleep(500);

system("cls");

toxy(46,8);

printf("-------------------------");

toxy(46,9);

printf("| |");

toxy(46,10);

printf("| 取款成功!是否继续? |");

toxy(46,12);

printf("| 1.是 2.否 |");

toxy(46,13);

printf("| |");

toxy(46,14);

printf("-------------------------");

while(1)

{

t=getch();

if(t'1')

{

break;

}

else if(t'2')

{

menu();break;

}

}

}while(1);

}

void list() //明细

{

system("cls");

color(10);

monp head,p;

int i=10;

head=ss();

p=head;

toxy(50,5);

printf(" 自动存取款机模拟系统");

toxy(54,6);

printf("账单明细");

toxy(30,7);

printf("-------------------------------------------------------------");

toxy(31,8);

printf("金 额 时 间 日 期");

toxy(30,9);

printf("-------------------------------------------------------------");

while(p!=NULL)

{

toxy(30,i);

if(p->money>=0)

{

printf("+%f %-24s%s",p->money,p->time,p->date);

}

else

{

printf("%f %-24s%s",p->money,p->time,p->date);

}

p=p->next;

i++;

}

toxy(50,i);

printf("请按任意键返回主菜单");

getch();

menu();

}

void transfer_money() //转账

{

do

{

system("cls");

color(10);

FILE *fp1;

monp p,head,p1;

float money,sum=0;

char name[20],t;

char time[10],date[10];

toxy(46,12);

printf("请输入您要转入的账号:");

gets(name);

toxy(46,14);

printf("请输入您要转出的金额:");

scanf("%f",&money);

getchar(); //吸收回车键

sum=Sum();

if(money>sum) //如果要转出的金额大于余额

{

toxy(46,16);

printf("余额不足!");

Sleep(500);

continue; //结束本次循环

}

fp1=fopen(name,"rb"); //以只读的方式打开名字为name的二进制文件

if(fp1NULL) //如果文件不存在

{

toxy(46,16);

printf("账户不存在!");

fclose(fp1);

Sleep(500);

continue;

}

fp1=fopen(name,"ab"); //以追加的方式打开名字为name的二进制文件

p=(monp)malloc(M); //向内存申请一段空间

p->money=-money;

_tzset();

_strtime(time);

strcpy(p->time,time);

_strdate(date);

strcpy(p->date,date);

save_money(p);

p1=(monp)malloc(M);

p1->money=money;

strcpy(p1->time,time);

strcpy(p1->date,date);

if(fwrite(p1,M,1,fp1)!=1) //将p1所指向的一个大小为M的节点 存入fp1所指向的文件中

{

printf("转账失败,请重试!");

continue;

}

fclose(fp1);

toxy(46,18);

printf("正在操作,请稍后....");

Sleep(500);

system("cls");

toxy(46,8);

printf("-------------------------");

toxy(46,9);

printf("| |");

toxy(46,10);

printf("| 转账成功!是否继续? |");

toxy(46,12);

printf("| 1.是 2.否 |");

toxy(46,13);

printf("| |");

toxy(46,14);

printf("-------------------------");

while(1)

{

t=getch();

if(t'1')

{

break;

}

else if(t=='2')

{

menu();

}

}

}while(1);

}

float Sum()

{

monp head=NULL,p;

float sum=0;

head=ss();

p=head;

while(p!=NULL)

{

sum+=p->money; //求和

p=p->next;

}

if(head==NULL)

sum=0;

return sum;

}

monp ss() //求余额

{

FILE *fp; //文件指针

monp p,head=NULL,p2,pre=NULL;

int n=0;

//float sum=0;

fp=fopen(_name,"ab+"); //以只读的方式打开名字为_name的二进制文件

if(fpNULL)

{

printf("cannot open file");

}

else

{

while(!feof(fp)) //判断标记是否移动到文件末尾

{

n++;

p=(monp)malloc(M); //向内存申请一段空间

fread(p,M,1,fp); //将fp所指向的文件中的一段大小为M的 内容赋给p

if(n1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

p2->next=NULL;

}

}

fclose(fp); //关闭文件

if(pre!=NULL)

pre->next=NULL;

return(head); //返回sum值

}

void save_money(monp p) //将p所指向的内容存入文件中

{

FILE *fp; //文件指针

fp=fopen(_name,"ab"); //以追加的方式打开名字为_name的二进制文件

if(fp==NULL)

{

printf("cannot open file");

}

if(fwrite(p,M,1,fp)!=1) //将p所指向的一段大小为M的内容存入fp所指向的文件中

{

printf("write error");

}

fclose(fp); //关闭文件

}

void over() //退出软件

{

char t;

toxy(48,11);

printf("-----------------------");

toxy(48,12);

printf("| 您确定要退出吗? |");

toxy(48,14);

printf("| 1.确定 2.取消 |");

toxy(48,15);

printf("-----------------------");

while(1)

{

t=getch(); //输入t

switch(t)

{

case '1':

system("cls");

color(6);

toxy(48,10);

printf("正在安全退出....");

Sleep(1000); //暂停1秒

system("cls");

color(8);

toxy(48,10);

printf("已安全退出软件");

toxy(48,12);

printf("谢谢使用!");

toxy(48,14);

printf("by-by_");

exit(0); break; //终止程序

case '2':

menu(); break; //调用函数,进入菜单

default :break;

}

}

}

main() //

{

signin(); //调用函数

}

`

四 运行结果

主界面

注册

选择操作



存款



取款



转账

五 作业小结

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 8 8
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 20 20
Development 开发 150 150
Analysis 需求分析(包括学习新技术) 14 6
Design Spec 生成设计文档 6 6
Design Review 设计复审 7 7
Coding Standard 代码规范 4 3
Design 具体设计 10 12
Coding 具体编码 40 35
Code Review 代码复审 10 20
Test 测试(自我测试,修改代码,提交修改) 3 3
Reporting 报告 5 5
Test Report 测试报告 5 12
Size Measurement 计算工作量 2 3
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 10 5

个人作业三——ATM管理系统的更多相关文章

  1. 作业三 ATM

    模拟实现一个ATM+购物商场程序 1.额度15000自定义 商城和银行两个帐户 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 3.可以提现,手续费5%,提现额度不能超过50% 4.每月22日 ...

  2. ATM管理系统(三)

    一.作业信息 博客班级 软件工程 作业要求 作业要求 作业目标 你理解的作业目标具体内容 学号 3180701218 二.题目要求 编写一个ATM管理系统,语言不限,要求应包括以下主要功能:(1)开户 ...

  3. Python-S13作业-day5-之 ATM

    Python-S13作业-day5-之 ATM 需求: 模拟实现一个ATM + 购物商城程序    额度 15000或自定义     实现购物商城,买东西加入 购物车,调用信用卡接口结账   其实是两 ...

  4. 软件工程大作业(学生会管理系统)Web端个人总结报告

    软件工程大作业(学生会管理系统)Web端个人总结报告 一.小组信息 1.所在小组:第二组 2.小组选题:学生会管理系统 3.项目源代码链接: Web端源代码:code 小程序端源代码:code APP ...

  5. JAVA作业三

    (一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Gr ...

  6. jQuery 作业三个按钮

    作业三个按钮 <!--声明 文档--> <!DOCTYPE html> <!--定义字符集--> <html lang="zh-CN"&g ...

  7. 作业三:LINUX内核的启动过程

    作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...

  8. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  9. 20165301 预备作业三:Linux安装及命令入门

    预备作业三:Linux安装及命令入门 VirtualBox虚拟机的安装 在进行安装之前,原本以为有了娄老师的安装教程会是一件很容易的事情.万万没想到,在自己实际动手操作中,还是遇到了许多困难.通过与同 ...

随机推荐

  1. 信号发送接收函数:sigqueue/sigaction

    信号是一种古老的进程间通信方式,下面的例子利用sigqueue发送信号并附带数据:sigaction函数接受信号并且处理时接受数据. 1.sigqueue: 新的信号发送函数,比kill()函数传递了 ...

  2. Spring源码之事务(一)— TransactionAutoConfiguration自动配置

    总结: 在ConfigurationClassParser#parse()中会对deferredImportSelectorHandler进行处理(在处理@ComponentScan 自己所写@Com ...

  3. Linux操作系统选择

    主流的操作系统 ubuntu centos debian oracle linux 主要使用的操作系统就是上面几个,主要是ubuntu和centos,debian是基于ubuntu改的,oracle ...

  4. PL/SQL Developer 13注册码(亲测可用)

    product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number: 226959 password: xs374ca

  5. Struts2漏洞渗透笔记

    虽然这是一次失败的渗透,但是也学到不少新姿势. 目标机环境:①外网②win2012③360全家桶 一,利用Struts2终极利用工具上传一句话 jsp的一句话,有时候会出现兼容问题.比如Cknife的 ...

  6. linux学习笔记全-如何学习linux?

    简介 今天整理文件整理出了好多年前学习linux的笔记 就整理下发布在博客上怕文件形式会误删. linux入门基础对于新手而言不推荐看书!!不推荐看书!!(大牛跳过)先看视频看linuxcast的视频 ...

  7. mysql 重要日志文件总结

    作者:丁仪 来源:https://chengxuzhixin.com/blog/post/mysql_zhong_yao_ri_zhi_wen_jian_zong_jie.html 日志是所有应用的重 ...

  8. 史上最全!2020面试阿里,字节跳动90%被问到的JVM面试题(附答案)

    前言:最近老是收到小伙伴的私信问我能不能帮忙整理出一份JVM相关的面试题出来,说自己在大厂去面试的时候这一块问的是特别多的,每次自己学的时候每次都学不到重点去.这不他来了,一份详细的JVM面试真题给大 ...

  9. 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)

    P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...

  10. iOS如何实现语音播报及后台播放

    最近项目刚刚交付,偶然间用到了语音播报和语音搜索的功能.语音搜索我用的是讯飞的demo,感觉效果还不错,感兴趣的话可以去官网上面下载demo,里面讲的特别的详细,不过稍显麻烦一些.语音播报讯飞也有de ...