Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 20:50   #1
stas135642
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 39
По умолчанию Массив списков в C

Здравствуйте, уважаемые форумчане. Недавно начал писать программу, которая будет работать с базой данных. Начало небольшое есть
Код:
Файл "DATA.h"
struct dataofequipments 
{
	int num; //Порядковый номер оборудования в таблице
	char vendor[15]; // производитель
	char model[35]; // модель
	unsigned int year; // год выпуска
	unsigned int  price; // цена
	unsigned int  mark; // оценка
}data[SIZE];


const char * shapka =	"\n _____________________________________________________________________________\n"
                        "|  #  | Производитель |    Модель    | Год выпуска | Цена,р.| Оценка (0-100) |\n"
						" ----------------------------------------------------------------------------- \n";
const char * out_res = "  %2d   %13s   %12s          %4d   %6d              %3d    \n"; //указатель на строку, которая будет выводиться//
char namesofequipments[][30]={
"Процессоры",
"Видеокарты",
"Материнские платы",
"Кулеры",
"Блоки питания",
"HDD",
"USB-flash",
"SSD",
"Micro/mini sd",
"Акустические системы",
"Ноутбуки",
"Мыши",
"Клавиатуры",
"Принтеры",
"Сканеры",
"Web-камеры",
};
char category[30];
int numberofcategory;
char ch;
FILE* list, *table;
int proverka;
char choise[30];
char fname[30];

void printoflist ();
Код:
Файл "library.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
#define SIZE 220
Код:
Файл "Program.cpp"
#include "library.h" //библиотеки и макроопределения
#include "DATA.h" //используемые данные
void printoflist ()
{
printf("                                     HARDWARE\n");
printf("The equipment list:\n\n");
int numberofcategory=1;
for (int i=0;i<16;i++)                                             //      
  {                                                                //
      printf ("%d.%s\n", numberofcategory, namesofequipments[i]);  //  Вывод на экран списка комплектующих
      numberofcategory++;                                          //
  }                                                           
printf("\nВы желаете получить список оборудования в виде файла?<Y/N>");
do{
	  gets(choise);
	  sscanf(choise, "%s", &ch); 
	  if((ch=='y')||(ch=='Y'))
		  proverka=1;
	  else if((ch=='n')||(ch=='N'))
		  proverka=0;
	  else
		  printf("Такой команды нет! Введите команду еще раз <Y/N>");
}while((ch!='y')&&(ch!='Y')&&(ch!='n')&&(ch!='N'));
if (proverka==1)
   {  
	  printf("Введите имя файла(имя файла.расширение): ");
	  gets(fname);
	  if( (list=fopen(fname,"w"))==NULL)//открываем файл
      printf("Ошибка файла");
	  fprintf(list,"The equipment list:\n\n");
	  for(int i=0; i<16; i++){
	  fprintf(list,"%d.",(i+1));
      fwrite(namesofequipments[i],sizeof(namesofequipments[i]), 1, list);
	  fprintf(list,"\n");}
      fclose(list);
      printf("Файл создан\n");
}}

void main ()
{
setlocale (LC_ALL, "Russian");
printoflist ();
printf("\nВведите номер категории:");
do{
      gets(category);
      sscanf(category, "%d", &numberofcategory);
      if (numberofcategory<=0||numberofcategory>16)
		  printf("\aОшибка. Введите номер категории еще раз:");
}while(numberofcategory<=0||numberofcategory>16);
system("cls");
data[numberofcategory-1].num=1;
printf("Введите производителя: ");
scanf("%s",data[numberofcategory-1].vendor);
printf("Введите введите название модели: ");
scanf("%s",data[numberofcategory-1].model);
printf("Введите год выпуска: ");
scanf("%d",&data[numberofcategory-1].year);
printf("Введите цену оборудования: ");
scanf("%d",&data[numberofcategory-1].price);
printf("Поставьте оценку оборудованию: ");
scanf("%d",&data[numberofcategory-1].mark);
printf("%s", shapka);
printf (out_res, data[numberofcategory-1].num, data[numberofcategory-1].vendor, data[numberofcategory-1].model, data[numberofcategory-1].year,  data[numberofcategory-1].price, data[numberofcategory-1].mark);
printf("\nВы желаете записать таблицу в файл?<Y/N>");
getch();
}
Конечно, видно невооруженным глазом, что программа очень далека от совершенства. По крайней мере толком не реализована работа с массивом структур. Да и связывать программу только со статикой совершенно не хочется. У меня есть небольшая идея: массив списков структур. Поясняю: массив будет одномерным, доступ к элементам будет реализован по принципу (введи номер категории - получи таблицу). А таблица будет представлять из себя список (пока можно обойтись и однонаправленным). Визуально это будет смотреться так (каждая строка таблицы информационная часть структуры (элемента списка)). Помогите, плз, с реализацией данной идеи. Буду очень благодарен !!!!))))
stas135642 вне форума Ответить с цитированием
Старый 15.10.2011, 02:52   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Не совсем понял, что вы хотите, но если не понимаете, как работать с массивами структур, то можно взять vector. Там всё очень легко. А гугл поможет с ним разобраться...
TwiX вне форума Ответить с цитированием
Старый 15.10.2011, 09:14   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Не совсем понял, что вы хотите, но если не понимаете, как работать с массивами структур, то можно взять vector. Там всё очень легко. А гугл поможет с ним разобраться...
Чего вы свой vector везде суете? Человек на C пишет.

ТС, тоже не совсем понял что вам нужно... как-то так:

Код:
struct List
{
    // реализация списка
};
...
// массив списков
struct List* arr = (struct List*) malloc(N * sizeof(struct List));
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 16.10.2011, 02:08   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Чего вы свой vector везде суете? Человек на C пишет.
Вектор очень удобен и прост в обращении. На С? А почему файл называется "Program.cpp"?
TwiX вне форума Ответить с цитированием
Старый 16.10.2011, 15:54   #5
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Вектор очень удобен и прост в обращении.
Это не значит что его нужно пихать во все дыры.

Цитата:
Сообщение от TwiX Посмотреть сообщение
На С? А почему файл называется "Program.cpp"?
Спросите это у ТС, но название темы и код явно говорят на чем он пишет.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка списков ioda1986 Помощь студентам 0 18.04.2010 00:10
Слияние списков Rom@shka Общие вопросы C/C++ 5 07.05.2009 20:24
Формирование списков BrenD Microsoft Office Excel 1 06.04.2009 08:28
слияние списков counter Общие вопросы C/C++ 4 02.01.2009 22:47
Объединение списков. life_burns Microsoft Office Excel 5 05.04.2008 16:13