PDA

View Full Version : مبتدی: جلوگیری از وارد کردن اطلاعات یکسان .



aali361
چهارشنبه 24 اردیبهشت 1393, 23:33 عصر
سلام . من توی برنامه ام به مشکلی برخوردم و در حل اون درمانده شدم ! . شرح ماجرا اینه که کاربر میاد یک سری ایدی و نام و نمره دانشجویی رو وارد میکنه. حالا من میخوام که کاربر نتونه ایدی هایی که قبلا وارد شده رو دوباره وارد کنه . یه چیزایی نوشتم اما نمیدونم کجاش رو اشتباه نوشتم که دفعه ی دوم که کاربر میاد اطلاعات جدید وارد کنه برنامه میگه همشون قبلا وارد شدند ؟!#include #include #include #include using namespace std;struct student{ int id; char name[100]; int sc;};void insert(){ system("cls"); int z, j, v, h, y, p; ifstream fz1("f:\\z1.txt"); fz1 >> y; p = y; ofstream f("f:\\z.txt", ios_base::app); ofstream f1("f:\\z1.txt"); ifstream fz("f:\\z.txt"); student b[100]; if (y > 0) cout

کامبیز اسدزاده
پنج شنبه 25 اردیبهشت 1393, 00:04 صبح
سلام . من توی برنامه ام به مشکلی برخوردم و در حل اون درمانده شدم ! . شرح ماجرا اینه که کاربر میاد یک سری ایدی و نام و نمره دانشجویی رو وارد میکنه. حالا من میخوام که کاربر نتونه ایدی هایی که قبلا وارد شده رو دوباره وارد کنه . یه چیزایی نوشتم اما نمیدونم کجاش رو اشتباه نوشتم که دفعه ی دوم که کاربر میاد اطلاعات جدید وارد کنه برنامه میگه همشون قبلا وارد شدند ؟!#include #include #include #include using namespace std;struct student{ int id; char name[100]; int sc;};void insert(){ system("cls"); int z, j, v, h, y, p; ifstream fz1("f:\\z1.txt"); fz1 >> y; p = y; ofstream f("f:\\z.txt", ios_base::app); ofstream f1("f:\\z1.txt"); ifstream fz("f:\\z.txt"); student b[100]; if (y > 0) cout

دوست عزیز کدهاتون رو بین تگ های C++ قرار بدین تا ببینیم چی به چیه !

aali361
پنج شنبه 25 اردیبهشت 1393, 09:15 صبح
دوست عزیز کدهاتون رو بین تگ های C++‎ قرار بدین تا ببینیم چی به چیه !


#include <iostream>
#include <fstream>
#include <stdarg.h>
#include <stdlib.h>
using namespace std;
struct student{
int id;
char name[100];
int sc;
};
void insert()
{
system("cls");
int z, j, v, h, y, p;
ifstream fz1("f:\\z1.txt");
fz1 >> y;
p = y;
ofstream f("f:\\z.txt", ios_base::app);
ofstream f1("f:\\z1.txt");
ifstream fz("f:\\z.txt");
student b[100];




if (y > 0)
cout << y << '\t' << "student is inserted" << endl;
else{
y = 0;
p = 0;
cout << "0 student is inserted" << endl;
}
cout << "how many student do you want to insert?" << endl;
cin >> z;
system("cls");
for (j = 1; j <= z; j++)
{
do{
h = 0;
cout << "insert id" << endl;
cin >> b[j].id;
for (v = 1; v <= y; v++)
{
fz >> b[v].id;
if (b[j].id == b[v].id)
{
h = 1;
cout << "this id has been inserted\n";


}
}
}




while (h == 1);
fz >> b[j].id;
cout << "insert name" << endl;
cin >> b[j].name;
cout << "insert score" << endl;
cin >> b[j].sc;
system("cls");
f << b[j].id << '\t' << b[j].name << '\t' << b[j].sc << endl;
y++;
}
f1 << p + z;
f1.close();
system("cls");
return;
}
int main()
{




for (;;)
{
int i;
cout << "1)insert" << endl << "2)sort" << endl << "3)search" << endl << "4)view" << endl << "5)delet" << endl << "6)exit" << endl;
cin >> i;
if (i == 1)
insert();
else if (i == 6)
return 0;
else
cout << "wrong inpute!" << endl;
}




}

کامبیز اسدزاده
پنج شنبه 25 اردیبهشت 1393, 09:34 صبح
خب اولا شما برای اینکار بهتره از Database استفاده کنید !
دوما اگه اجباره رو همین کدتون مشکلتون رو حلش کنید در این قسمتی که کاربر اطلاعات رو وارد میکنه باید یک جستجو بنویسید برای مقایسه وجود یا عدم وجود مقدار وارد شده کاربر که توسط cin میگیرید.

aali361
پنج شنبه 25 اردیبهشت 1393, 12:05 عصر
خب اولا شما برای اینکار بهتره از Database استفاده کنید !
دوما اگه اجباره رو همین کدتون مشکلتون رو حلش کنید در این قسمتی که کاربر اطلاعات رو وارد میکنه باید یک جستجو بنویسید برای مقایسه وجود یا عدم وجود مقدار وارد شده کاربر که توسط cin میگیرید.

از دیتابیس که چیزی نمیدونم .
دقیقا من همین کارو رو میکنم . اینکه کاربر میاد ایدی رو میده بعد برنامه میاد با ایدی هایی که قبلا وارد شده چک میکنه . اما نمیدونم کجای کارم مشکل داره که درست عمل نمیکنه ؟!

majid1605
پنج شنبه 25 اردیبهشت 1393, 12:17 عصر
با این کدی که شما گذاشتید تنها راهنمایی که میشه کرد همونیه که دوستمون گفتن
یه برنامه نوشتید تمام متغیرها تک حرفی a,b,y,z,..... بعد ما چطور باید متوجه بشیم که فلان متغیر کارش چیه و چه کاری قراره بکنه ؟
اگه میخواید برنامه نویسی کنید همیشه دوتا نکته رو مد نظر قرار بدید تا مثل ما بد عادت نشید
اول اینکه همیشه واسه متغیرها و توابع اسم متناسب انتخاب کنید و از اسامی تک حرفی پرهیز کنید
دوم واسه دو کلمه هم شده جلوی توابع و متغیرهاتون کامنت بزارید .
البته فکر کنم ایراد کارتون جایی که کل یک فایل رو دارید میریزید تووی ارایه نمیدونم به چه شکل تووی فایل ذخیره می کنید ولی اگه میخواید تووی ارایه بریزید باید هر id رو یک خانه بهش اختصاص بدید نه هربار کل محتویات فایل رو بریزید تووی یک خانه آرایه
خط 40 به بعد اگه اشتباه نکنم همون جستجویی هست که انجام میدید

aali361
پنج شنبه 25 اردیبهشت 1393, 12:42 عصر
void insert()
{
system("cls");
int z, j, v, h, y, p;
ifstream fz1("f:\\z1.txt");// فایلی که تعداد دانشجو هایی که قبلا وارد شده
fz1 >> y; // تعداد ایدی هایی که قبلا وارد شده را به وای میریزیم
p = y;// از وای یک کپی میگیرم چون بعدا لازمش دارم
ofstream f("f:\\z.txt", ios_base::app);//فایلی که اطلاعات دانشجویی ذخیره میشه
ofstream f1("f:\\z1.txt");
ifstream fz("f:\\z.txt");
student b[100];
if (y > 0)//وای تعداد دانشجو هاست
cout << y << '\t' << "student is inserted" << endl;
else{// اگر وای کوچکتر از صفر باشد یعنی تعداد صفر بوده
y = 0;
p = 0;
cout << "0 student is inserted" << endl;
}
cout << "how many student do you want to insert?" << endl;
cin >> z;//تعداد دانشجوی هایی که قراره وارد شه
system("cls");
for (j = 1; j <= z; j++)
{
do{
h = 0;
cout << "insert id" << endl;
cin >> b[j].id;// اینجا میام ایدی رو میگیرم
for (v = 1; v <= y; v++)
{
fz >> b[v].id;// ایدی هایی که قبلا وارد شده بود رو فراخونی میکنم
if (b[j].id == b[v].id)
{
h = 1;
cout << "this id has been inserted\n";


}
}
}




while (h == 1);
fz >> b[j].id;
cout << "insert name" << endl;
cin >> b[j].name;
cout << "insert score" << endl;
cin >> b[j].sc;
system("cls");
f << b[j].id << '\t' << b[j].name << '\t' << b[j].sc << endl;//در نهایت اطلاعات در یک فایل ذخیره میشه
y++;
}
f1 << p + z;// پی همون تعداد دانشجوی هایی که قبلا وارد شده بود که تعدادی بهش اضافه میشه
f1.close();
system("cls");
return;
}