给你一份满分的程序设计报告(附源码)

article/2025/10/19 13:36:16

ATM业务模拟系统功能要求
客户端:

定义用户数据对象,并以此为参数生成用户操作对象;
存款操作:生成一条新的业务信息(业务对象),追加到交易记录中,并修改账号余额;
取款操作:判断取款数是否超过账号余额,超过显示错误信息,不做任何操作。否则,生成一条新的业务信息(业务对象),追加到交易记录中,并修改账号余额;
业务查询:包括余额查询、存/取款业务查询和指定日期、时间段内业务查询;
退出:将用户信息、交易记录更新到数据文件。
管理端:

增加用户:添加新用户信息并初始化(注意不重复添加,要判重);
注销账号:对用户进行临时冻结;
激活账号:对冻结的账号解封;
查看业务信息(查看所有用户/指定用户信息、查看指定时间段业务交易情况(取款、存款、全部)
退出:将用户信息写入数据文件;
ATM类设计要求
数据类:数据成员及get/set函数,成员函数构造函数、必要的运算符重载(含数据合法性检测)

操作类:必要的数据成员、构造函数,实现功能的成员函数。要使用继承、多态机制

文件命名方式:与前面的作业相同。

说明:课程设计为计算机系acm教练费教授所布置,博主拿到了最高等级的评分,以下为提交作业文件夹,附源码,课程设计仅供学习参考,如若抄袭后果自负~

 

 

 

#include<bits/stdc++.h>using namespace std;//日期类
class Date
{
private:int year;int month;int day;
public:friend ostream& operator<<(ostream& out, Date& d);friend istream& operator>>(istream& in, Date& d);Date operator+(int n);bool operator<(const Date& d) const;Date(int year, int month, int day = 1);Date();int get_year();int get_month();int get_day();
};int Date::get_year()
{return year;
}int Date::get_month()
{return month;
}
int Date::get_day()
{return day;
}
Date::Date()
{year = 2022;day = 1;month = 1;
}
Date::Date(int year, int month, int day)
{this->year = year;this->month = month;this->day = day;
}
Date Date::operator+(int n)
{int cal[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };while (n){if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))cal[2] = 29;day++;if (day > cal[month]){day = 1;month++;}if (month > 12){month = 1;year++;}n--;}return *this;
}bool Date::operator<(const Date& d) const
{if (year != d.year) return year <= d.year;else if (month != d.month) return month <= d.month;else return day <= d.day;
}ostream& operator<<(ostream& out, Date& d)
{out << d.year << "/" << d.month << "/" << d.day;return out;
}istream& operator>>(istream& in, Date& d)
{int cal[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int year, month, day;char op;in >> year >> op >> month >> op >> day;if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))cal[2] = 29;if (month < 1 || month > 12){return in;}else if (day < 1 || day > cal[month]){return in;}else {d.year = year;d.month = month;d.day = day;}return in;
}//
class Account
{
private:string account_id;//账号iddouble account_money;//账号余额string account_state;//账号状态
public:friend ostream& operator<<(ostream& out, Account& account);friend istream& operator>>(istream& in, Account& account);Account(string account_id, double account_money, string account_state);Account(){}void set_Account_id(string account_id);void set_Account_money(double account_money);void set_Account_state(string account_state);string get_Account_id();double get_Account_money();string get_Account_state();};ostream& operator<<(ostream& out, Account& account)
{out << account.account_id << " " << account.account_money << " " << account.account_state << endl;return out;
}istream& operator>>(istream& in, Account& account)
{in >> account.account_id >> account.account_money >> account.account_state;return in;
}void Account::set_Account_id(string account_id)
{this->account_id = account_id;
}void Account::set_Account_money(double account_money)
{this->account_money = account_money;
}void Account::set_Account_state(string account_state)
{this->account_state = account_state;
}string Account::get_Account_id()
{return account_id;
}double Account::get_Account_money()
{return account_money;
}string Account::get_Account_state()
{return account_state;
}Account::Account(string account_id, double account_money, string account_state)
{this->account_id = account_id;this->account_money = account_money;this->account_state = account_state;
}//记录类
class Record
{
private:Date record_date;//日期string account_id;//账号iddouble account_money;//余额double operate_money;//操作金额string business;//业务
public:Record(Date record_date, string account_id, double account_money, double operate_money, string business);Record() {}void set_Record_date(Date record_date);void set_Account_id(string account_id);void set_Account_money(double account_money);void set_Operate_money(double operate_money);void set_Business(string business);Date get_Record_date();string get_Account_id();double get_Account_money();double get_Operate_money();string get_Business();friend ostream& operator<<(ostream& out, Record& record);friend istream& operator>>(istream& in, Record& record);};void Record::set_Record_date(Date record_date)
{this->record_date = record_date;
}void Record::set_Account_id(string account_id)
{this->account_id = account_id;
}void Record::set_Account_money(double account_money)
{this->account_money = account_money;
}void Record::set_Operate_money(double account_money)
{this->operate_money = operate_money;
}void Record::set_Business(string business)
{this->business = business;
}Date Record::get_Record_date()
{return record_date;
}string Record::get_Account_id()
{return account_id;
}double Record::get_Account_money()
{return account_money;
}double Record::get_Operate_money()
{return operate_money;
}string Record::get_Business()
{return business;
}Record::Record(Date record_date, string account_id, double account_money, double operate_money, string business)
{this->record_date = record_date;this->account_id = account_id;this->account_money = account_money;this->operate_money = operate_money;this->business = business;
}ostream& operator<<(ostream& out, Record& record)
{out << record.record_date << " " << record.account_id << " " << record.account_money << " " << record.operate_money << " " << record.business << endl;return out;
}
istream& operator>>(istream& in, Record& record)
{in >> record.record_date >> record.account_id >> record.account_money >> record.operate_money >>record.business;return in;
}class Operate_Base
{
protected:vector<Record> record;multimap<Date, int> map_record_date;//记录日期multimap<string, int> map_record_id;//记录账号multimap<string, int> map_record_business;//记录业务public:Operate_Base(){record_read();};~Operate_Base(){record_write();}void record_add(Record& record1);void record_write();void record_read();void renew_RecordMap();void record_find_date(Date d1);void record_find_date_range(Date d1, Date d2);};void Operate_Base::record_add(Record& record1)
{record.push_back(record1);map_record_id.insert(make_pair(record1.get_Account_id(), record.size() - 1));map_record_date.insert(make_pair(record1.get_Record_date(), record.size() - 1));map_record_business.insert(make_pair(record1.get_Business(), record.size() - 1));}
void Operate_Base::record_read()
{Record record1;ifstream ifs("2020214380record.txt");if (!ifs)return;while (ifs >> record1){record.push_back(record1);map_record_id.insert(make_pair(record1.get_Account_id(), record.size() - 1));map_record_date.insert(make_pair(record1.get_Record_date(), record.size() - 1));map_record_business.insert(make_pair(record1.get_Business(), record.size() - 1));}ifs.close();
}void Operate_Base::record_write()
{fstream ofs("2020214380record.txt");vector<Record>::iterator it;for (it = record.begin(); it != record.end(); it++){ofs << *it;}ofs.close();
}void Operate_Base::renew_RecordMap()
{vector<Record>::iterator it;map_record_id.clear();map_record_date.clear();map_record_business.clear();int index = 0;for (it = record.begin(); it < record.end(); it++){index = it - record.begin();map_record_id.insert(make_pair(it->get_Account_id(), index));map_record_date.insert(make_pair(it->get_Record_date(), index));map_record_business.insert(make_pair(it->get_Business(), index));}
}class Operate:public Operate_Base
{
private:vector<Account> account;multimap<string, int> map_account_id;//账号idmultimap<string, int> map_account_state;//账号状态
public:Operate();~Operate(){account_write();record_write();}void account_read();void account_write();void account_add(Account & account);void account_dongjie(Account & account);void account_jiedong(Account & account);void account_find();void account_find(string account_id);void account_find_state(string account_state);void renew_AccountMap();void record_find();void record_find(string account_id);void record_find_cunkuan();void record_find_qukuan();void record_find_date(Date d);void record_find_date_range(Date d1, Date d2);};Operate::Operate()
{account_read();//record_read();
}void Operate::account_read()
{Account account1;ifstream ifs("2020214380account.txt");if (!ifs)return;while (ifs >> account1){account.push_back(account1);map_account_id.insert(make_pair(account1.get_Account_id(), account.size() - 1));map_account_state.insert(make_pair(account1.get_Account_state(), account.size() - 1));}ifs.close();
}void Operate::account_write()
{fstream ofs("2020214380account.txt");vector<Account>::iterator it;for (it = account.begin(); it != account.end(); it++){ofs << *it;}ofs.close();
}void Operate::account_add(Account& account1)
{string n = account1.get_Account_id();multimap<string, int>::iterator it;it = map_account_id.find(n);if(it == map_account_id.end()){account.push_back(account1);map_account_id.insert(make_pair(account1.get_Account_id(), account.size() - 1));map_account_state.insert(make_pair(account1.get_Account_state(), account.size() - 1));}else{cout << "重复添加" << endl;}}void Operate::account_dongjie(Account & account1)
{string n = account1.get_Account_id();int money = account1.get_Account_money();Account account2(n, money, "冻结");multimap<string, int>::iterator it;it = map_account_id.find(n);if(it == map_account_id.end()){return;}else{int a = it->second;account[a] = account2;renew_AccountMap();}
}void Operate::account_jiedong(Account & account1)
{string n = account1.get_Account_id();int money = account1.get_Account_money();Account account2(n, money, "正常");multimap<string, int>::iterator it;it = map_account_id.find(n);if(it == map_account_id.end()){return;}else{int a = it->second;account[a] = account2;renew_AccountMap();}
}void Operate::renew_AccountMap()
{vector<Account>::iterator it;map_account_id.clear();map_account_state.clear();int index = 0;for (it = account.begin(); it < account.end(); it++){index = it - account.begin();map_account_id.insert(make_pair(it->get_Account_id(), index));map_account_state.insert(make_pair(it->get_Account_state(), index));}
}void Operate::account_find(string n)
{multimap<string, int>::iterator it;it = map_account_id.find(n);if (it == map_account_id.end()){return;}else{cout << account[it->second] << endl;}
}void Operate::account_find()
{vector<Account>::iterator it;for (it = account.begin(); it != account.end(); it++){cout << *it << endl;}
}void Operate::record_find()
{vector<Record>::iterator it;for (it = record.begin(); it != record.end(); it++){cout << *it << endl;}
}void Operate::record_find(string n)
{multimap<string, int>::iterator it;it = map_record_id.find(n);if (it == map_record_id.end()){return;}else{cout << record[it->second] << endl;}
}void Operate::record_find_cunkuan()
{auto ret = map_record_business.equal_range("存款");multimap<string, int>::iterator itbegin = ret.first;multimap<string, int>::iterator itend = ret.second;if (itbegin != map_record_business.end()){multimap<string, int>::iterator it = itbegin;do{cout << record[it->second] << endl;it++;} while (it != itend);}else{cout << "未找到" << endl;}}void Operate::record_find_qukuan()
{auto ret = map_record_business.equal_range("取款");multimap<string, int>::iterator itbegin = ret.first;multimap<string, int>::iterator itend = ret.second;if (itbegin != map_record_business.end()){multimap<string, int>::iterator it = itbegin;do{cout << record[it->second] << endl;it++;} while (it != itend);}else{cout << "未找到" << endl;}
}void Operate::record_find_date(Date d)
{auto ret = map_record_date.equal_range(d);multimap<Date, int>::iterator itbegin = ret.first;multimap<Date, int>::iterator itend = ret.second;if (itbegin != map_record_date.end()){multimap<Date, int>::iterator it = itbegin;do{cout << record[it->second] << endl;it++;} while (it != itend);}else{cout << "未找到" << endl;}
}void Operate::record_find_date_range(Date d1, Date d2)
{multimap<Date, int>::iterator itbegin = map_record_date.upper_bound(d1);multimap<Date, int>::iterator itend = map_record_date.lower_bound(d2);if (itbegin == itend){cout << "没找到" << endl;}else{for (multimap<Date, int>::iterator it = itbegin; it != itend; it++){cout <<record[it->second];}}}class Operate_User: public Operate_Base
{
private:Account account;Date date_now;public:Operate_User();~Operate_User(){record_write();};Operate_User(Account account, Date date_now);void user_cunkuan(double money);void user_qukuan(double money);void find_money();void record_find_cunkuan();void record_find_qukuan();void record_find_date(Date d1);void record_find_date_range(Date d1, Date d2);};Operate_User::Operate_User(Account account, Date date_now)
{this->account = account;this->date_now = date_now;
}Operate_User::Operate_User()
{//record_read();
}void Operate_User::user_cunkuan(double money)
{double money1 = account.get_Account_money() + money;Record record1(date_now, account.get_Account_id(), money1, money, "存款");record_add(record1);}void Operate_User::user_qukuan(double money)
{if(account.get_Account_money() >= money){double money1 = account.get_Account_money() - money;Record record1(date_now, account.get_Account_id(), money1, money, "取款");record_add(record1);}else{cout << "余额不足" << endl;}}void Operate_User::find_money()
{cout << account.get_Account_money() << endl;}void Operate_User::record_find_date(Date d)
{auto ret = map_record_date.equal_range(d);multimap<Date, int>::iterator itbegin = ret.first;multimap<Date, int>::iterator itend = ret.second;if (itbegin != map_record_date.end()){multimap<Date, int>::iterator it = itbegin;do{if(record[it->second].get_Account_id() == account.get_Account_id()){cout << record[it->second] << endl;}it++;} while (it != itend);}else{cout << "未找到" << endl;}
}void Operate_User::record_find_date_range(Date d1, Date d2)
{multimap<Date, int>::iterator itbegin = map_record_date.upper_bound(d1);multimap<Date, int>::iterator itend = map_record_date.lower_bound(d2);if (itbegin == itend){cout << "没找到" << endl;}else{for (multimap<Date, int>::iterator it = itbegin; it != itend; it++){if(record[it->second].get_Account_id() == account.get_Account_id()){cout <<record[it->second];}}}
}void Operate_User::record_find_cunkuan()
{auto ret = map_record_business.equal_range("存款");multimap<string, int>::iterator itbegin = ret.first;multimap<string, int>::iterator itend = ret.second;if (itbegin != map_record_business.end()){multimap<string, int>::iterator it = itbegin;do{if(record[it->second].get_Account_id() == account.get_Account_id()){cout << record[it->second] << endl;}it++;} while (it != itend);}else{cout << "未找到" << endl;}
}void Operate_User::record_find_qukuan()
{auto ret = map_record_business.equal_range("取款");multimap<string, int>::iterator itbegin = ret.first;multimap<string, int>::iterator itend = ret.second;if (itbegin != map_record_business.end()){multimap<string, int>::iterator it = itbegin;do{if(record[it->second].get_Account_id() == account.get_Account_id()){cout << record[it->second] << endl;}it++;} while (it != itend);}else{cout << "未找到" << endl;}
}void testDate()
{Date test1(2007, 4, 29);cout << test1 << endl;test1 = test1 + 365;cout << test1 << endl;cout << endl;
}void testAccount()
{Account account("1234567", 10000, "正常");cout << account << endl;}void testRecord()
{Date date1(2022, 1, 6);Record record1(date1, "123456", 10000, 1000, "取款");cout << record1 << endl;
}void testOperate()
{Operate op1;Account account1("1234567", 10000, "正常");//op1.account_add(account1);Account account2("1234568", 10000, "正常");Date date(2022, 1, 4);Date date1(2022,1,8);op1.account_add(account2);//op1.account_dongjie(account1);op1.account_jiedong(account1);//op1.record_find();//op1.record_find("1234567");//op1.record_find_date(date1);//op1.record_find_date_range(date, date1);//op1.record_find_cunkuan();//op1.record_find_qukuan();}void testOperate_User()
{Account account1("1234567", 10000, "正常");Date date1(2022, 1, 4);Date date2(2022, 2, 5);Operate_User op_user1(account1, date1);//op_user1.find_money();//op_user1.user_cunkuan(100);op_user1.user_qukuan(200);//op_user1.user_qukuan(20000);//op_user1.user_cunkuan(2000);//op_user1.user_cunkuan(5000);//op_user1.user_qukuan(1000);//op_user1.user_qukuan(2000);//op_user1.record_find_cunkuan();//op_user1.record_find_qukuan();//op_user1.record_find_date(date2);//op_user1.record_find_date_range(date1, date2);
}int main()
{//testDate();//testAccount();//testRecord();testOperate();testOperate_User();return 0;
}

 这门课程已达到满绩,课程设计报告我已经放到资源里了,如有需要同学们可以下载,或者联系博主领取~


http://chatgpt.dhexx.cn/article/mK7l3dVO.shtml

相关文章

C++ 会议信息管理系统 程序设计报告

C 会议信息管理系统 C 会议信息管理系统 程序设计报告 会议记录管理系统 问题描述: 定义会议信息类class Conference 会议信息包括:会议编号&#xff0c;会议名称、部门名称、会议地点&#xff0c;会议日期&#xff0c;会议主会议记录人&#xff0c;出席人员&#xff0c;会…

Java高级程序设计课程设计报告

一、基于OBE模式的实验目的和要求 要求复习课件中理论知识&#xff1b;练习课堂所讲的例子&#xff1b;编写程序完成以下实验目标并上交实验报告&#xff08;包括电子文档与纸质文档&#xff09;。 能够根据Java集合框架&#xff0c;利用迭代方法编程实现对集合的遍历操作。能…

Java面向对象程序设计实验报告(实验三 继承的练习)

✨作者&#xff1a;命运之光 ✨ 专栏&#xff1a;Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录&#xff1a;源程序代码&#xff08;带注释&#xff09; demo3类 Person类 Student类 …

《程序设计基础课程设计》实验报告

《程序设计基础课程设计》实验报告 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 完成题目&#xff1a;1、2、3、4、5、6 概述 此次六道题目里面第四题是参考某博主的文章后实现的&#xff0c;有一些地方仍然不是特别理解&#xff0c;但是原文章里面存在一些小错…

Java面向对象程序设计实验报告(实验五 接口的练习)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录&#xff1a;源程序代码&#xff08;带注释&#xff09; demo5类 Instrument类 Piano类 …

Python程序设计实验报告【合集】

课堂作业 1、词频统计&#xff1a;输入一个文件&#xff0c;程序读取文件&#xff0c;文件内容是英文内容&#xff0c;不少于500个单词的内容&#xff0c;统计每个单词在该短文内出现的次数。 https://www.jb51.net/article/144405.htm https://www.cnblogs.com/Eudemines/p/9…

Java面向对象程序设计实验报告(实验一 面向对象基础练习)

✨作者&#xff1a;命运之光 ✨ 专栏&#xff1a;Java面向对象程序设计实验报告 目录 ✨一、需求分析 ✨二、概要设计 ✨三、详细设计 ✨四、调试分析 ✨附录&#xff1a;源代码&#xff08;带注释&#xff09; 实验一 面向对象基础练习 实验环境&#xff1a;EclipseJDK …

《C语言程序设计》课程总结报告

《C语言程序设计》课程总结报告 一、我学到的内容 二、我的收获&#xff08;包括我完成的所有作业的链接收获&#xff09; 1.PTA作业 22年秋-第1周基础作业 https://pintia.cn/problem-sets/1575138141596397568 22年秋-第2周课后作业 https://pintia.cn/problem-sets/1…

(软件工程)-- 总体设计报告

1引言 1.1编写目的 本阶段完成系统的大致设计并说明系统的数据结构与软件结构&#xff0c;本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件概貌&#xff0c;把它加工成程序细节上非常接近与源程序开发的软件标识。 预期读者&#xff1a;软件测试人员、程序开发员…

程序设计报告模板

一、问题及代码 /* * 文件名称&#xff1a;Ex1-1.cpp * 作 者&#xff1a;曾辉 * 完成日期&#xff1a;2015 年 1 月 1 日 * 版 本 号&#xff1a;v1.0 * 对任务及求解方法的描述部分: * 输入描述&#xff1a;无 * 问题描述&#xff1a;我的第一个C程序&#xff0c;熟…

C语言程序设计期末大作业—教师工资管理系统(附程序设计报告)

C语言大作业——教师工资管理系统 主要的难点在于文件读取 数据结构用的是链表 源码放上&#xff0c;直接粘贴复制就可以&#xff0c;我的C程大作业 具体的问题不懂的可以评论和私信&#xff0c;总之还是简单的 放张图片 程序设计报告可以私信我 #include<stdio.h> …

C语言程序设计 课程设计报告

C语言程序设计课程设计报告 一、 系统简介 学生成绩管理系统简介&#xff1a;一个简易的学生成绩管理系统&#xff0c;它包括并可以实现&#xff1a;“录入并保存学生信息、打印学生信息、读取学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、退出系统 ”…

程序设计基础实训报告

一、实训目的 程序设计基础是程序设计C语言和C语言的入门课程&#xff0c;该课程兼顾基础理论和编程实践。通过学习该课程的理论知识和编程实战&#xff0c;培养学生的专业实践技能&#xff0c;学校设有专用实训周&#xff0c;帮助学生全面牢固地掌握课堂教学内容、提升实际动手…

程序设计课程设计报告(学生成绩管理系统)

程序设计课程设计报告 课程设计题目及内容 题目&#xff1a;学生成绩管理系统 设计要求及提示如下&#xff1a; &#xff08;1&#xff09;、设计一个学生类Student,包括数据成员&#xff1a;姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。 &#xff08;2&…

如何在A4相纸上打印4张5寸相片

第一步&#xff0c;打开ps&#xff0c;点击文件-新建&#xff0c;新建一个空白文档&#xff0c;宽度设置为12.7cm&#xff0c;高度设置为8.9cm&#xff0c;分辨率设置为300&#xff0c;rgb颜色设置为8位。 如下图&#xff1a; 第二步&#xff0c;设置完点确定&#xff0c;然后…

PS照片排版1寸2寸等及照片规格

我的电脑是macOS&#xff0c;为了这个文章通用win的朋友&#xff0c;尽量少用快捷键&#xff0c;多截图&#xff0c;本文以1寸为例介绍&#xff1a; 1.打开PS&#xff0c;文件-打开-选择要打印的照片 2.点裁剪-选择宽/高/分辨率-输入高度-输入宽度-输入分辨率-确定 3. 点击图像…

自制1寸照片及打印排版

1、打开Photoshop,新建一个2.5*3.5cm的图层&#xff0c;分辨率为300的文件。如果是2寸的就新建一个3.5*5.3cm的图层。&#xff08;文件----新建&#xff09; 2、打开拍摄的照片&#xff0c;使用”拖动”工具将照片拖到之前新建的1寸照片中&#xff0c;照片拖进去之后原始尺寸肯…

计算机报名照片 1寸,国考录用系统2021国家公务员考试报名照片尺寸是1寸还是2寸?...

国考录用系统2021国家公务员考试报名照片尺寸是1寸还是2寸?由国家公务员考试网其他答疑栏目提供&#xff0c;更多关于国家公务员考试,国考报名确认,国考缴费入口,国考照片,国家公务员考试其他答疑的内容&#xff0c;请关注国家公务员考试网/河北人事考试网&#xff01; 2021年…

photoshop中如何在6寸相纸上打印1寸照片10张2X5模式(自动填充模式)

如何在6寸相纸上打印1寸照片 初学photoshop&#xff0c;在ps中设置。 1.将照片拖入到ps中 2.在图像->图像大小中设置图像尺寸&#xff0c;如下图&#xff1a; 3.确认后&#xff0c;将图片另存为 4.在文件->新建 由于6寸照片是152mmX102mm 因此将1寸尺寸画布尺寸设置成3.…

六寸画布平铺16张一寸照片并打印

1、新建一个一寸画布 2、照片拷贝进来 适当缩放 铺满 3、新建一个六寸画布 4、ctrlc拷贝一寸照片 粘贴到六寸画布中 调整位置 复制图层 可以用方向键微调 合并图层&#xff08;ctrlE&#xff09;后继续复制图层 可以放16张一寸照片 5、添加打印机&#xff08;已添加…