برنامه سازی پیشرفته نیمسال دوم 25-29 دانشکده مهندسی کامپیوتر تمرین دوم پیمان دودانگه زمان تحویل 99:فروردین پ .1موعد ارسال تمرین ساعت 95:32روز جمعه مورخ 1525/1/99است. .9تمرین باید به صورت حضوری تحویل داده شود و استفاده از کامنت ،و ساختار کد نمره خواهد داشت .بنابراین نمره کامل از سیستم داوری به معنای نمره کامل نبوده و فقط بخشی از نمره شما خواهد بود. .5در این سوال نیازی به پیاده سازی تابع ها و غیر از توابع خواسته شده و نیست و تنها کالس ها و توابع خواسته شده را باید پیادهسازی کنید .به باشند. ها بقیه توابعی که استفاده میکنید باید .4در صورت داشتن هرگونه مشکل ،سوال خود را با تگ مناسب در .5با هر گونه تقلب برخورد جدی خواهد شد. مطرح کنید. سوال 1اعداد بزرگ ( 9۰نمره) پس از تحویل کامپایلر به کمیته فنی جاواچلنج این کمیته با یک مشکل جدید مواجه شد که حتی طراحان اصلی جاوا هم فکری برای حل آن نکرده بودند .مشکل این بود که امکان ذخیره اعداد خیلی بزرگ در آنها وجود نداشت. این کمیته باز به دلیل اتکا به نیروی داخل دانشکده تصمیم گرفت وظیفه نوشتن کالسی از اعداد صحیح (بدون محدودیت بازه اعداد) با قابلیت های زیر را به شما بسپارد: کالس public class BigNumber توابع کالس : این دو تابع یک به شکل ;)public BigNumber(int number و یکی با گرقتن عدد های این کالس هستند که یکی با گرفتن عدد به شکل با مقدار داده شده تولید میکند. ;)public BigNumber(String number این تابع ،یک ;)public void add(BigNumber number که این تابع روی آن صدا زده شده اضافه میکند. میگیرد و به آن public static BigNumber add(BigNumber first, BigNumber ;)second جدید خروجی میگیرد و حاصل جمع آنها را به عنوان یک این تابع ،دو میدهد(.اعداد ورودی هیچ تغییری نمیکنند) را به شکل یک این تابع دقیقا چسبیده به عدد میآید. ;)(public String toString (خود عدد) برمیگرداند .در صورتی که عدد منفی بود عالمت ‘‘- public static int compare(BigNumber first, BigNumber ;)second میگیرد و این دو را با هم مقایسه میکند .اگر عدد اول کوچکتر بود ،-1اگر دو عدد این تابع ،دو مساوی بودند ،۰وگرنه 1برمیگرداند. سوال 9آهنگ منیجر( 4۰نمره ) پس از حل تمرینهای چند جمله ای توسط شما ،مهیار نمره امتیازی زیادی از دبیر ریاضی گرفت .به همین خاطر تصمیم گرفت از این به بعد کل کالسهای ریاضی را آهنگ گوش کند تا دبیر دوباره به اوگیر بدهد و از او تمرین های اضافه بخواهد و او هم این تمرین های اضافه را به شما بدهد تا برای او حل کنید( .منتظر تمرین 5و صورت پروژه باشید) به همین خاطر مهیار تصمیم گرفته آهنگهای موبایلش را مرتب کند و یا بگیرد .مثال دیگر اسم خواننده یه آهنگ های موبایلش را درست کند. به کمک شما نیازدارد تا های مناسبی برای هر آهنگ در نظر نباشد! برای این کار مهیار به این منظور مهیار به یک سری کالس جاوا نیاز دارد که هر کدام توابعی مخصوص برای کارهای خود دارند. است. اولین کالس public class Playlist توابع کالس : ;)public Playlist(String name با گرفتن نام ،کالس را میسازد. این کانستراکتور ،اولین باری که صدا زده میشود یک این عدد را یکی یکی زیاد میکند .به طور مثال نام پنجمین خواهد بود. این تابع یک آهنگ میگیرد و آن را به ;)(public Playlist میسازد و در دفعات بعدی با نام که با این کانستراکتور ساخته میش ;)public void addSong(Song song اضافه میکند. ;)public void addAlbum(Album album اضافه میکند. این تابع یک آلبوم میگیرد و آهنگ های آن را به همان ترتیبی که در آلبوم هستند به ;)public boolean removeSong(Song song حذف میکند. این تابع یک آهنگ میگیرد و آن را از ;)(public Song getCurrentSong صدا زده نشده ،یا این تابع آهنگی که در حال پخش است را برمیگرداند .در ابتدای کار وقتی که هنوز تابع برمیگرداند. صدا زده شده، وقتی تابع ;)(public void goNext این تابع آهنگ در حال اجرا را یکی به جلو میبرد .اگر آهنگ بعدی وجود نداشته باشد (آهنگ آخر باشیم) تابع صدا زده میشود. ;)(public void goPrevious این تابع آهنگ در حال اجرا را یکی به عقب میبرد .اگر آهنگ قبلی وجود نداشته باشد (آهنگ اول باشیم) تابع صدا زده میشود. ;)(public void play باشیم ،خواه در حال این تابع همیشه اولین آهنگ را به عنوان آهنگ در حال اجرا قرار میدهد .خواه در حالت اجرا. ;)(public void stop آهنگ در حال اجرا را میکند. کالس class Album توابع کالس : ;)public Album(String name, Artist artist, String genre با گرفتن نام آلبوم و خواننده و نام سبک ،آلبوم را میسازد و در ابتدا هیچ آهنگی در آن نیست. این تابع هر بار که صدا می شود باید یک هستند. و سبک آن ;)(public static Album getSingle است و خواننده یکسان را برگرداند که آن آلبوم ،نامش ;)(public Artist getArtist خواننده آلبوم را برمیگرداند. ;)(public String getGenre سبک آلبوم را برمیگرداند. ;)(public String getName نام آلبوم را برمیگرداند. ;)public Boolean addSong(Song song یک آهنگ میگیرد و در صورتی که خواننده آن با خواننده آلبوم یکی بود آن را به آلبوم اضافه میکند و برمیگرداند. برمیگرداند .در غیر این صورت ;)public void removeSong(Song song یک آهنگ میگیرد و در صورت وجود آن در آلبوم ،آن را حذف میکند. ;)(public Song[] getSongs آهنگ های آلبوم را برمیگرداند. ;)(public String toString نام آلبوم ،نام خواننده ،سبک آلبوم ،و نام آهنگ های آلبوم را یکی یکی و هرکدام را با یک فاصله از قبلی برمیگرداند. کالس class Song توابع کالس : ;)public Song(String name, Artist artist با گرفتن نام آهنگ و خواننده آن ،کالس را میسازد. ;)(public String getName نام آهنگ را برمیگرداند. ;)(public Artist getArtist خواننده آهنگ را برمیگرداند. ;)(public Album getAlbum آلبوم آهنگ را برمیگرداند .اگر این آهنگ در هیچ آلبومی نباشد ،یعنی به آلبومی اضافه نشده باشد و یا از آلبومش برگردانده می شود. حذف شده باشد، ;)(public String toString نام آهنگ و نام خواننده و نام آلبوم را با یک فاصله از هم برمیگرداند. کالس class Artist توابع کالس : ;)public Artist(String name با گرفتن نام خواننده ،کالس را می سازد. ;)(public String getName نام خواننده را برمیگرداند. ;)(public Song[] getSongs آهنگ هایی که توسط این خواننده خواندهشدهاند را در یک آرایه برمیگرداند. ;)(public Album[] getAlbums آلبوم هایی که توسط این خواننده خواندهشدهاند را در یک آرایه برمیگرداند. ;)(public String toString نام خواننده و نام همه ی آلبوم هایی که خوانده است را به ترتیب و با یک فاصله برمیگرداند. سوال 5بانک ( 4۰نمره 9۰ +نمره امتیازی) در این تمرین باید یک بانک را پیاده سازی کنید .کالس ها و توابع مربوط به این بانک به شرح زیر است: کالس public class Bank توابع کالس : ;)public Bank(String name کالس را با گرفتن نام بانک میسازد. ;)(public Bank کالس را میسازد و نام آن را به صورت پیشفرض ” “ قرار میدهد. ;)(public String getName نام بانک را بر میگرداند. ;)(public Branch[] getBranches شعبههای یک بانک را در یک آرایه برمیگرداند. ;)(public Customers[] getCustomers مشتریان یک بانک را در یک آرایه برمیگرداند. ;)public void addBranch(Branch branch یک شعبه میگیرد و آن را به شعبه های بانک اضافه میکند. ;)public void addCustomer(Customer customer یک مشتری میگیرد و آن را به مشتریان بانک اضافه میکند. کالس public class Branch توابع کالس : ;)public Branch(String name, Bank bank کالس را با گرفتن نام شعبه و یک بانک میسازد. ;)(public String getName نام شعبه را برمیگرداند. ;)(public Employee[] getStaff کارکنان یک شعبه را در یک آرایه برمیگرداند. ;)(public Employee getManager مدیر شعبه بانک را برمیگرداند. ;)public void setManager(Employee manager یک کارمند میگیرد و او را به عنوان مدیر شعبه قرار میدهد. ;)public void addEmployee(Employee employee یک کارمند میگیرد و او را به کارمندان شعبه بانک اضافه میکند. یک کارمند تنها میتواند در یک شعبه مشغول به کار باشد و در صورت کار در جای دیگر به کارمندان آن شعبه اضافه نمیشود. ;)public void fireEmployee(Employee employee یک کارمند میگیرد و او را از کارمندان شعبه بانک حذف میکند. کالس class Employee توابع کالس : ;)public Employee(String name, Branch branch کالس را با گرفتن نام کارمند و یک شعبه میسازد. ;)(public String getName نام کارمند را برمیگرداند. کالس class Customer توابع کالس : ;)public Customer(String name, int id کالس را با گرفتن نام مشتری و شماره شناسه مشتری میسازد. ;)(public String getName نام یک مشتری را برمیگرداند. ;)(public int getID شماره شناسه یک مشتری را برمیگرداند. ;)(public Account[] getAccounts حساب های یک مشتری را در یک آرایه برمیگرداند. ;)public void addAccount(Account account یک حساب را به حسابهای مشتری اضافه میکند. public boolean withdraw(Account account, double amount, ;)BankDate date برمیگرداند با گرفتن حساب و میزان برداشت آن مقدار را در صورت امکان از موجودی حساب کسر میکند و برمیگرداند. و در غیر این صورت شرایطی که در آن برداشت از حساب ممکن نیست عبارت است از: حساب متعلق به مشتری نباشد. موجودی حساب از میزان درخواست شده کمتر باشد. باشد. حساب از نوع بلند مدت public boolean deposit(Account account, double amount, ;)BankDate date برمیگرداند با گرفتن حساب و میزان واریز ،آن مقدار را در صورت امکان به موجودی حساب اضافه میکند و برمیگرداند( .حساب میتواند متعلق به این مشتری نباشد). و در صورتی که حساب از نوع بلند مدت باشد public boolean transfer(Account source, Account dest, ;)double amount, BankDate date با گرفتن حساب های مبدا و مقصد و وجه انتقال ،در صورت امکان مقدار وجه را از حساب مبدا به مقصد منتقل برمیگرداند. برمیگرداند و در غیر این صورت مینماید و شرایطی که در آن انتقال ممکن نیست عبارت است از: حساب مبدا متعلق به مشتری نباشد. یکی از حساب های مبدا یا مقصد از نوع بلند مدت باشند. موجودی حساب مبدا از وجه انتقال کم تر باشد. ;)public double getBalance(Account account, BankDate date با گرفتن یک حساب مقدار موجودی را بر میگرداند .اگر این مشتری صاحب حساب نباشد مقدار -1برگردانده میشود. public boolean closeAccount(Account account, BankDate ;)date با گرفتن یک حساب آن را میبندد و از لیست حسابهای مشتری حذف میکند و با موجودی آن حساب کاری نمیکند. public boolean closeAccount(Account closeAccount, Account ;)account, BankDate date با گرفتن دو حساب و یک تاریخ ،حساب اول را میبندد و از لیست حساب های مشتری حذف میکند .موجودی این حساب به حساب دوم منتقل میشود که متعلق به همین مشتری است و باید از نوع کوتاه مدت یا جاری باشد. برمیگرداند. و در غیر این صورت در صورت امکان بر میگرداند: شرایطی که در آن یکی از حساب ها متعلق به مشتری نباشد. حساب دوم از نوع بلند مدت باشد. ;)(public String toString اطالعات مربوط به مشتری را در یک رشته برمیگرداند. قالب این رشته به این صورت است که در خط اول شماره شناسه مشتری ،در خط بعدی نام مشتری میآید. کالس class Account توابع کالس : public Account(String type, int number, Customer owner, ;)double initialAmount, Account support, BankDate date کالس را با گرفتن نوع حساب ،شماره حساب ،صاحب حساب ،موجودی اولیه ،یک حساب ثانویه و تاریخ افتتاح حساب میسازد .حساب دوم برای این است که اگر نوع حساب از نوع بلند مدت بود ،سود مربوط به آن در آن حساب قرار گیرد .اگر نوع حساب از نوع بلند مدت نبود ،مهم نیست که حساب دوم چه باشد ،اما در صورت بلند مدت بودن حساب باید حساب دوم متعلق به همین مشتری باشد و از نوع کوتاه مدت یا جاری باشد .در صورت مغایرت ورودی ها با هر یک از موارد باال ،حساب ساخته شده به هیج مشتری ای نسبت داده نمیشود. است. و ، نوع حساب یکی از حالت های سود حساب های کوتاه مدت %1۰و به صورت روزانه محاسبه میشود وحساب های بلند مدت به صورت 3ساله و با سود %9۰به طور ساالنه هستند .حساب های جاری نیز سودی ندارند. ;)public double getBalance(BankDate date با گرفتن یک تاریخ موجودی حساب را در آن تاریخ بر میگرداند. ;)(public BankDate getLastOperationDate تاریخ آخرین عملیات انجام شده روی این حساب را برمیگرداند. عملیات شامل توابعی است که مشتری میتواند صدا بزند( .توابعی که در آرگمان های آنها تاریخ دریافت میشود). ;)(public int getNumber شماره یک حساب را برمیگرداند. ;)(public String getType نوع یک حساب را در قالب یک رشته برمیگرداند. این رشته میتواند تنها یکی از حالت های” صاحب حساب را برمیگرداند. “ ”، “”، “ باشد. ;)(public Customer getOwner ;)public void withdraw(double amount, BankDate date با گرفتن یک تاریخ و میزان برداشت ،آن را از موجودی حساب کم میکند. ;)public void deposit(double amount, BankDate date با گرفتن یک تاریخ و میزان واریز آن را به موجودی حساب اضافه میکند. ;)(public String toString اطالعات مربوط به یک حساب را در قالب یک رشته برمیگرداند. قالب این رشته به این صورت است که در خط اول شماره حساب ،در خط بعدی نام مالک حساب ،خط بعدی نوع حساب و در خط آخر موجودی حساب آورده میشود. کالس class BankDate توابع کالس ;)public BankDate(int day, int month, int year از این کالس برای وارد کردن تاریخ عملیات بانکی و محاسبه سود حساب ها استفاده میشود. ;)(public int getDay روز این تازیخ را برمیگرداند. ;)(public int getMonth ماه این تاریخ را بر میگرداند. ;)(public int getYear سال این تاریخ را برگرداند. توضیحات: بود اجازه بسته شدن ندارد. اگر حساب سود حساب های کوتاه مدت در هر روز و بلند مدت در هر سال به ترتیب از فرمول های زیر بدست می آید: * ()۰.1 / 56۰ * ()۰.9 ها ،توابعی که در کالس ها و در تمرین میتوانید توابع خود را پیاده سازی کنید .اما به جز باشند. پیاده سازی میکنید و توابعی که در صورت سوال آمده باقی توابع باید ای که برای تست این تمرین قرار میگیرد .تاریخ ها به صورت صعودی استفاده میشوند .به طور در تابع مثال ،اگر یک مشتری میزان وجهی را به حساب خود واریز کند و بعد از آن در تاریخ دیگری درخواست صورت حساب بدهد ،تاریخ این عملیات به ترتیب صدا زدن توابع است. بخش امتیازی: پیادهسازی های مربوط به حساب های بلند مدت مربوط به بخش امتیازی میباشد. توضیحات مربوط به حساب های بلند مدت: ریخته میشود. پس از افتتاح حساب ،سود آن به صورت %9۰ساالنه به حساب موقعی که یک حساب بلند مدت پیش از اتمام 3سال بسته میشود ،سودی که در این مدت هر سال به یک حساب خاص ریخته میشده از حساب مورد نظر کسر میشود .اما با سود آن سود کاری نداریم. اگر مشتری حساب بلند مدت خود را قبل از 3سال ببندد ،سودی به حساب تعلق نمیگیرد و سودهایی که ریخته شده باید از آن برداشتهشود. تا تاریخ بسته شدن حساب به حساب یک حساب بلند مدت پس از اتمام 3سال وارد یک 3سال جدید میشود.
© Copyright 2025 Paperzz