PDA

View Full Version : یک برنامه برای انتخاب چند گزینه



ho3ein.3ven
دوشنبه 21 اسفند 1391, 16:32 عصر
سلام بر همگی
دوستان من چطوری با سی پلاس پلاس می تونم یک برنامه بنویسم که چند تا گزینه رو داشته باشه و هر کئوم رو که کاربر خواست انتخاب کنه ؟ همانند تصویر زیر :
101261

ho3ein.3ven
سه شنبه 22 اسفند 1391, 22:48 عصر
سلام .واقعا کسی نمی تونه توی سی پلاس پلاس منو درست کنه ؟

fati63
سه شنبه 22 اسفند 1391, 23:04 عصر
با سلام اگه منظورتون رو درست متوجه شده باشم، میتونی از دستور switch یا if else استفاده کنی البته قبلش از کاربر بخواهی با دستور cin گزینه دلخواه رو وارد کنه
موفق باشی

ho3ein.3ven
سه شنبه 22 اسفند 1391, 23:08 عصر
نه منظورم این نبود .
می خوام که کاربر بتونه با کیبرد گزینه ها رو انتخاب کنه.
اگه به عکس هم نگاه بکنین متوجه میشین.

fati63
سه شنبه 22 اسفند 1391, 23:12 عصر
خوب میشه دیگه.بعد از اجرا برنامه کاربر گزینه مورد نظر رو انتخاب میکنه

fati63
سه شنبه 22 اسفند 1391, 23:15 عصر
این مثال رو ببین مربوط به درس ساختمان داده هست یه طراحی منو برای push ,pop هست #include<iostream.h>
#include<conio.h>
#define max 10
class stack{
private:
int top1;
int a[max];
public:
stack();
int pusha(int x);
int popa();
};
stack::stack()
{
top1=-1;
}
int stack ::pusha(int x){
if(top1==max-1)
return 0;
else top1++;
a[top1]=x;
return 1;
}
int stack::popa(){
if (top1==-1)
return 0;
else
return a[top1--];
}

int main()
{
int i,n,f,z,d;
stack s;
cout<<"1-push"<<"\n"<<"2-pop"<<"\n"<<"3-print"<<"\n"<<"4-exit"<<"\n";
cout<<"select a number between (1-3)"<<"\n";
cin>>z;
while(z>=1&&z<=3) {
if(z==1){
cout<<"enetr a number of stack:"<<"\n";
cin>>n;
cout<<"enter number for push"<<"\n";
for (i=0;i<n;i++){
cin>>f;
d=s.pusha(f);
if (d==0)
cout<<"stack is full"<<"\n";
} }
else if(z==2){
d=s.popa();
if(d==0)
cout<<"stack is empty"<<"\n";
else cout <<d<<"\n";
}
else
if(z==3){
for(i=0;i<n;i++){
d=s.popa();
cout<<d<<" ";
}
cout<<"\n"; }

else
if(z==4){
break;}
cout<<"1-push"<<"\n"<<"2-pop"<<"\n" <<"3-print"<<"\n"<<"4-exit"<<"\n";
cout<<"select a number between (1-4)"<<"\n";

cin>>z; }

getch();
return 0;
}

ho3ein.3ven
سه شنبه 22 اسفند 1391, 23:25 عصر
من اصلا نمی خوام کاربر چیزی رو وارد کنه . فقط می خوام بتونه با جهت نما های کیبرد گزینه مورد نظر رو انتخاب کنه .

ho3ein.3ven
سه شنبه 22 اسفند 1391, 23:27 عصر
مثل setup کامپیوتر

developing
چهارشنبه 23 اسفند 1391, 10:28 صبح
با سلام

شما باید از دستورات گرافیکی مثل ایجاد پنجره، تغییر رنگ متن، تغییر رنگ پس زمینه متن و ... استفاده کنید

اگه جستجو کنید در همین تالار بحث های زیادی در این مورد شده مخصوصا قدیمیا(چون این کارها بیشتر زمان داس متداول بود)

ho3ein.3ven
چهارشنبه 23 اسفند 1391, 12:45 عصر
ممنون از شما به خاطر پاسختون.
اگر ممکنه نمونه قرار بدین چون چیزی پیدا نکردم.

developing
چهارشنبه 23 اسفند 1391, 13:26 عصر
باز هم سلام

نمی دونم می خوای چه کار کنی و آیا همون انتخابی که مورد نظرت هست کفایت می کنه یا می خوای پنجره ها رو هم کار کنی ولی فکر کنم لینک های زیر می تونن بهت کمک کنند:

قبل از اینکه به این لینک ها سری بزنی باید بگم روش حل مسئله ی شما اینه:

1- نمایش یک سری متن رنگی که در حالت غیر انتخاب قرار دارند
2- گرفتن کلیدهای فشرده شده مثل بالا، پایین و اعداد
3- انتخاب متن مورد نظر و از انتخاب در آوردن انتخاب قبلی

حالا هر رنگی رو برای انتخاب شدن می تونی استفاده کنی.

http://www.dreamincode.net/forums/topic/19910-text-and-background-color-in-c/

http://www.dreamincode.net/forums/topic/12347-c-color-change-in-dos/

http://en.sharejs.com/cpp/20230

http://in.answers.yahoo.com/question/index?qid=20081203081212AAFhR6n

http://stackoverflow.com/questions/8946412/easiest-way-to-colour-text-in-c-c-dos

http://www.dreamincode.net/forums/topic/131570-function-to-make-the-dos-window-close-in-c/

http://stackoverflow.com/questions/12378642/c-pixels-in-console-window

http://stackoverflow.com/questions/13489542/writing-anywhere-in-a-dos-window

ho3ein.3ven
چهارشنبه 23 اسفند 1391, 15:39 عصر
سلام. ممنون ازتون به خاظر قرار دادن این لینک ها.
تعدادی از این لینک ها بالا نیومدن تعدادی هم که بالا اومدن زیاد مربوط به این موضوع نمیشدن.
ببینید نرم افزار بانگ ها رو که دیدین ؟ من می خوام یه چیزی مثل اون بنویسم.
اگه ممکنه یک نمونه پروژه بزارین.

developing
پنج شنبه 24 اسفند 1391, 09:09 صبح
با سلام

من برای نمونه همون Hiren رو برات شبیه سازی کردم.

البته ببخشید یک کم ریخت و پاشه ولی به دردتون می خوره.

چون من با کامپایلرهای بورلند کار می کنم و آشنایی کمی با بقیه ی کامپایلرها دارم بنابراین کد رو هم در کامپایلر بورلند نوشتم.


#include <iostream.h>
#include <conio.h>

const int menucount = 5;

const short int colorText = 11; // can should be 0 to 15
const short int colorSelect = 7; // can should be 0 to 15

char Menu[menucount][255] = {"Item1", "Item2", "Item3", "Item4", "Item5"};

int index = 0;

int waitForPressAnyKey();

void CreateMenu(int selected = -1) {
clrscr();
textcolor(colorText);
// textbackground(colorSelect);
for (int i = 0; i < menucount; i++) {
if (i != selected)
textbackground(0);
else
textbackground(colorSelect);
cprintf("%s\r\n", Menu[i]);
}
textbackground(0);
cprintf("Please enter a number or choose an item. ");
if (selected != -1)
cprintf("%d", selected);
waitForPressAnyKey();
}

int waitForPressAnyKey() {
int input;
do {
if (kbhit()) // Was A Key Pressed?
{
input = getch(); // Assign The ASCII Value To input

if (input == 0)
input = getch();
switch (input) {
case 13: // Enter Key
printf("\nYour selected item is : %d \n", index);
system("pause");
exit(0);
break;
// 75: // Left Arrow
//
// break;
case 72: // Up Arrow
if (index == 0)
index = 4;
else
index--;
break;
case 77: // Right Arrow
break;
case 80: // Down Arrow
if (index == 4)
index = 0;
else
index++;
break;
case 48: // 0's diigt
case 49: // 1's diigt
case 50: // 2's diigt
case 51: // 3's diigt
case 52: // 4's diigt
case 53: // 5's diigt
// case 54:// 6's diigt
// case 55:// 7's diigt
// case 56:// 8's diigt
// case 57:// 9's diigt
index = input - 49;
break;
default:
index = -1;
}
if (index != -1) {
break;
}
}
}
while (1);
CreateMenu(index);
}

int main(void) {
CreateMenu();
waitForPressAnyKey();
getch();
return 0;
}

من این کد رو برای 5 تا آیتم نوشتم و شما می تونید به دلخواه بنویسید در ضمن می تونید از رنگ های دیگه ای استفاده کنید.

البته چون Hiren با عدد هم کار می کنه در قسمت سوئیچ اعداد رو هم برات نوشتم.

در آخر هم زمانی که کلید اینتر فشرده بشه شما باید کارهای مد نظرتون رو انجام بدید که من در اینجا یک متن رو نوشتم.

ho3ein.3ven
پنج شنبه 24 اسفند 1391, 13:02 عصر
با سلام

من برای نمونه همون Hiren رو برات شبیه سازی کردم.

البته ببخشید یک کم ریخت و پاشه ولی به دردتون می خوره.

چون من با کامپایلرهای بورلند کار می کنم و آشنایی کمی با بقیه ی کامپایلرها دارم بنابراین کد رو هم در کامپایلر بورلند نوشتم.


#include <iostream.h>
#include <conio.h>

const int menucount = 5;

const short int colorText = 11; // can should be 0 to 15
const short int colorSelect = 7; // can should be 0 to 15

char Menu[menucount][255] = {"Item1", "Item2", "Item3", "Item4", "Item5"};

int index = 0;

int waitForPressAnyKey();

void CreateMenu(int selected = -1) {
clrscr();
textcolor(colorText);
// textbackground(colorSelect);
for (int i = 0; i < menucount; i++) {
if (i != selected)
textbackground(0);
else
textbackground(colorSelect);
cprintf("%s\r\n", Menu[i]);
}
textbackground(0);
cprintf("Please enter a number or choose an item. ");
if (selected != -1)
cprintf("%d", selected);
waitForPressAnyKey();
}

int waitForPressAnyKey() {
int input;
do {
if (kbhit()) // Was A Key Pressed?
{
input = getch(); // Assign The ASCII Value To input

if (input == 0)
input = getch();
switch (input) {
case 13: // Enter Key
printf("\nYour selected item is : %d \n", index);
system("pause");
exit(0);
break;
// 75: // Left Arrow
//
// break;
case 72: // Up Arrow
if (index == 0)
index = 4;
else
index--;
break;
case 77: // Right Arrow
break;
case 80: // Down Arrow
if (index == 4)
index = 0;
else
index++;
break;
case 48: // 0's diigt
case 49: // 1's diigt
case 50: // 2's diigt
case 51: // 3's diigt
case 52: // 4's diigt
case 53: // 5's diigt
// case 54:// 6's diigt
// case 55:// 7's diigt
// case 56:// 8's diigt
// case 57:// 9's diigt
index = input - 49;
break;
default:
index = -1;
}
if (index != -1) {
break;
}
}
}
while (1);
CreateMenu(index);
}

int main(void) {
CreateMenu();
waitForPressAnyKey();
getch();
return 0;
}

من این کد رو برای 5 تا آیتم نوشتم و شما می تونید به دلخواه بنویسید در ضمن می تونید از رنگ های دیگه ای استفاده کنید.

البته چون Hiren با عدد هم کار می کنه در قسمت سوئیچ اعداد رو هم برات نوشتم.

در آخر هم زمانی که کلید اینتر فشرده بشه شما باید کارهای مد نظرتون رو انجام بدید که من در اینجا یک متن رو نوشتم.

سلام . من از کامپایلر ویژوال استدیو استفاده می کنم.
به این خط ها گیر میده :
exit(0);
system("pause");
textbackground(0);
textcolor(colorText);
clrscr();

فک کنم یک هیدر فایل رو ننوشتی .
بازم ممنون

smemamian
پنج شنبه 24 اسفند 1391, 17:49 عصر
clrscr(); دیگه استفاده نمیشه ...
هدر conio هم همینطور...

ho3ein.3ven
پنج شنبه 24 اسفند 1391, 18:54 عصر
خب بقیه خط ها پس چی ؟

developing
شنبه 26 اسفند 1391, 09:50 صبح
با سلام


گفتم که من از کامپایلر بورلند استفاده می کنم
در ضمن تابع exit و system هر دو تابع استاندارد هستند و در سرآیند stdlib اگه پیداش نکرد cstdlib رو بنویس
بقیه ی تابع ها هم در سرآیند conio و مربوط به کامپایلر بورلند.
البته من از یکی شنیدم که گفت در ویژوال استودیو ی 2008 به بعد اضافه اش کردن. شاید باید بدون .h بنویسیش یعنی به جای conio.h بنویس conio.
به هر حال این کارها رو انجام بده اگه درست شد فبها در غیر اینصورت یا باید کامپایلرتو عوض کنی یا ببینی معادل این دستورات در ویژوال استودیو چی هست.

ho3ein.3ven
یک شنبه 27 اسفند 1391, 11:48 صبح
فک کنم سی پلاس پلاس جواب نمیده . باید برم دنبال کنسول سی شارپ.