помогите разобраться
Добавлено: 08 июл 2005, 15:26
Всем привет!
Блин пришло лето - наступила летняя практика! ужас!
в общем ща опишу свою проблему. у меня задание было такое:
Задание:
SELECT UPPER (surname), UPPER (name)
FROM STUDENT
WHERE NAME LIKE ‘И%’ OR NAME LIKE ‘С%’
написано оно на sql.
Вот уточнение задания, уже написаное мной -
В задании необходимо вывести в верхнем регистре фамилии и имена студентов, имена которых начинаются на “И” или на “С”.
вот приблизительный листинг программы, в ней 2 проблемы!
Листинг программы:
#include "stdafx.h"
#include "string.h"
// Используемые структуры
struct STUDENT { // Студент
long STUDENT_ID; // числовой код, идентифицирующий студента
char SURNAME[15]; // фамилия студента
char NAME[15]; // имя студента
short STIPEND; // стипендия, которую получает студент
short KURS; // курс, на котором учится студент
char CITY[50]; // город, в котором живет студент
char BIRTHDAY[11]; // дата рождения студента
long UNIV_ID; // числовой код, идентифицирующий университет, в котором учится студент
} *TSTUDENT, *TRezult;
// Реализованные процедуры и функции
void InputData(void);
void InputRecord(int Index);
void CultivationData(void);
void DifinitionSise(void);
void InitData(void);
void MoveRecord(unsigned long IndexIn, unsigned long IndexOut);
void OutputData(void);
void OutputRecord(unsigned long Index);
// Глобальные переменные
unsigned long RSize; //Размер результирующего массива
int N; //Количество строк в таблице STUDENT
int main(int argc, char* argv[])
{
InputData();
CultivationData();
OutputData();
//Освобождаем память
delete [] TSTUDENT; // освобождение памяти
delete [] TRezult; // освобождение памяти
//printf("Hello World!\n");
return 0;
}
// Ввод данных таблицы STUDENT
void InputData(void)
{
// Спрашиваем количество строк
printf("\nPlease enter the number of record tab STUDENT:");
scanf("%ld",&N);
// Создаем динамический массив STUDENT
TSTUDENT = new STUDENT [N]; // выделение памяти под массив
// Заполняем массив данными
printf("\nPlease enter: STUDENT_ID SURNAME NAME STIPEND KURS CITY BIRTHDAY UNIV_ID\n");
for(int ii=0;ii<N;++ii) InputRecord(ii);
printf("\n");
}
// Ввод одной строки, заполнение элемента массива STUDENT
void InputRecord(int Index)
{ // Index - индекс заполняемого массива
// текущий номер, заполняемого элемента
printf("record %04d : ",Index+1);
scanf("%ld %ld %ld %hd %10s", &TSTUDENT[Index].STUDENT_ID, &TSTUDENT[Index].SURNAME, &TSTUDENT[Index].NAME, &TSTUDENT[Index].STIPEND, TSTUDENT[Index].KURS, TSTUDENT[Index].CITY, TSTUDENT[Index].BIRTHDAY, TSTUDENT[Index].UNIV_ID);
}
// Обработка данных, формирование результирующей таблицы Rezult
void CultivationData(void)
{
// Определение размерности результата (RSize)
DifinitionSise();
// Создаем динамический массив TRezult
TRezult = new STUDENT [RSize]; // выделение памяти под массив
// Заполняем динамический массив Rezalt данными
InitData();
}
// Определение размерности результата (RSize)
void DifinitionSise(void)
{
RSize=0;
//Вот здесь собственно и начинается проблемма
//нужно написать условие - что если имя начинается на И или на С, то результат увеличивается
for(int ii=0; ii<N; ++ii)
if (TSTUDENT[ii].NAME = ‘И%’ && TSTUDENT[ii].NAME = ‘С%’) ++RSize;
}
// Заполняем динамический массив Rezalt данными
void InitData(void)
{
int jj=0;
//Здесь тоже самое, что и немного выше. такое же условие
for(int ii=0; ii<N; ++ii)
if (TSTUDENT[ii].NAME = ‘И%’ && TSTUDENT[ii].NAME = ‘С%’){
// Перенос данных в результирующую таблицу
MoveRecord(jj,ii);
++jj;
}
}
// Перенос записи из одной таблицы в другую
void MoveRecord(unsigned long IndexIn, unsigned long IndexOut)
{
TRezult[IndexIn].SURNAME = TSTUDENT[IndexOut].SURNAME; // идентификатор фамилии
TRezult[IndexIn].NAME = TSTUDENT[IndexOut].NAME; // идентификатор имени
// Вывод данных на экран
void OutputData(void)
{
// Выводим на экран заголовок таблицы
printf("\n SURNAME \t NAME");
for(int ii=0;ii<(int)RSize;++ii) OutputRecord(ii);
// Концовка
printf("\n\n\n");
}
// Вывод на экран строки (Index - номер строки)
void OutputRecord(unsigned long Index)
{
// Выводим на экран строку результирующей таблицы
//И наконец здесь - мне нужно вывести всё в верхнем регистре - т.е. большими буквами. как это сделать???
printf("\n Record %04d: %04d %04d", Index+1, TRezult[Index].SURNAME, TRezult[Index].NAME);
}
Вот собственно и всё!!!
Помогите кто чем может!!! Если есть какие-то ошибки или замечания по программе прошу сообщить!
Блин пришло лето - наступила летняя практика! ужас!
в общем ща опишу свою проблему. у меня задание было такое:
Задание:
SELECT UPPER (surname), UPPER (name)
FROM STUDENT
WHERE NAME LIKE ‘И%’ OR NAME LIKE ‘С%’
написано оно на sql.
Вот уточнение задания, уже написаное мной -
В задании необходимо вывести в верхнем регистре фамилии и имена студентов, имена которых начинаются на “И” или на “С”.
вот приблизительный листинг программы, в ней 2 проблемы!
Листинг программы:
#include "stdafx.h"
#include "string.h"
// Используемые структуры
struct STUDENT { // Студент
long STUDENT_ID; // числовой код, идентифицирующий студента
char SURNAME[15]; // фамилия студента
char NAME[15]; // имя студента
short STIPEND; // стипендия, которую получает студент
short KURS; // курс, на котором учится студент
char CITY[50]; // город, в котором живет студент
char BIRTHDAY[11]; // дата рождения студента
long UNIV_ID; // числовой код, идентифицирующий университет, в котором учится студент
} *TSTUDENT, *TRezult;
// Реализованные процедуры и функции
void InputData(void);
void InputRecord(int Index);
void CultivationData(void);
void DifinitionSise(void);
void InitData(void);
void MoveRecord(unsigned long IndexIn, unsigned long IndexOut);
void OutputData(void);
void OutputRecord(unsigned long Index);
// Глобальные переменные
unsigned long RSize; //Размер результирующего массива
int N; //Количество строк в таблице STUDENT
int main(int argc, char* argv[])
{
InputData();
CultivationData();
OutputData();
//Освобождаем память
delete [] TSTUDENT; // освобождение памяти
delete [] TRezult; // освобождение памяти
//printf("Hello World!\n");
return 0;
}
// Ввод данных таблицы STUDENT
void InputData(void)
{
// Спрашиваем количество строк
printf("\nPlease enter the number of record tab STUDENT:");
scanf("%ld",&N);
// Создаем динамический массив STUDENT
TSTUDENT = new STUDENT [N]; // выделение памяти под массив
// Заполняем массив данными
printf("\nPlease enter: STUDENT_ID SURNAME NAME STIPEND KURS CITY BIRTHDAY UNIV_ID\n");
for(int ii=0;ii<N;++ii) InputRecord(ii);
printf("\n");
}
// Ввод одной строки, заполнение элемента массива STUDENT
void InputRecord(int Index)
{ // Index - индекс заполняемого массива
// текущий номер, заполняемого элемента
printf("record %04d : ",Index+1);
scanf("%ld %ld %ld %hd %10s", &TSTUDENT[Index].STUDENT_ID, &TSTUDENT[Index].SURNAME, &TSTUDENT[Index].NAME, &TSTUDENT[Index].STIPEND, TSTUDENT[Index].KURS, TSTUDENT[Index].CITY, TSTUDENT[Index].BIRTHDAY, TSTUDENT[Index].UNIV_ID);
}
// Обработка данных, формирование результирующей таблицы Rezult
void CultivationData(void)
{
// Определение размерности результата (RSize)
DifinitionSise();
// Создаем динамический массив TRezult
TRezult = new STUDENT [RSize]; // выделение памяти под массив
// Заполняем динамический массив Rezalt данными
InitData();
}
// Определение размерности результата (RSize)
void DifinitionSise(void)
{
RSize=0;
//Вот здесь собственно и начинается проблемма
//нужно написать условие - что если имя начинается на И или на С, то результат увеличивается
for(int ii=0; ii<N; ++ii)
if (TSTUDENT[ii].NAME = ‘И%’ && TSTUDENT[ii].NAME = ‘С%’) ++RSize;
}
// Заполняем динамический массив Rezalt данными
void InitData(void)
{
int jj=0;
//Здесь тоже самое, что и немного выше. такое же условие
for(int ii=0; ii<N; ++ii)
if (TSTUDENT[ii].NAME = ‘И%’ && TSTUDENT[ii].NAME = ‘С%’){
// Перенос данных в результирующую таблицу
MoveRecord(jj,ii);
++jj;
}
}
// Перенос записи из одной таблицы в другую
void MoveRecord(unsigned long IndexIn, unsigned long IndexOut)
{
TRezult[IndexIn].SURNAME = TSTUDENT[IndexOut].SURNAME; // идентификатор фамилии
TRezult[IndexIn].NAME = TSTUDENT[IndexOut].NAME; // идентификатор имени
// Вывод данных на экран
void OutputData(void)
{
// Выводим на экран заголовок таблицы
printf("\n SURNAME \t NAME");
for(int ii=0;ii<(int)RSize;++ii) OutputRecord(ii);
// Концовка
printf("\n\n\n");
}
// Вывод на экран строки (Index - номер строки)
void OutputRecord(unsigned long Index)
{
// Выводим на экран строку результирующей таблицы
//И наконец здесь - мне нужно вывести всё в верхнем регистре - т.е. большими буквами. как это сделать???
printf("\n Record %04d: %04d %04d", Index+1, TRezult[Index].SURNAME, TRezult[Index].NAME);
}
Вот собственно и всё!!!

Помогите кто чем может!!! Если есть какие-то ошибки или замечания по программе прошу сообщить!