Programlamada yeniyim. Programımda öğrencileri depolamak için bir veritabanı yapmam gerekiyor. Program, bağlantılı listede işaretler, kimlik, isim ve depo (yapı olarak) girmesine izin vermeli ve aynı zamanda dosya içinde saklanmalı ve ayrıca dosyadan bağlantılı listeye okunmalıdır. Sahip olduğum tek sorun, .exe programını kapattığımda ve .txt dosyasından bağlantılı listeye okumayı seçtiğimde çalışmam. Kodu derlediğimde hata çıkmadı, ancak SONRASINDA TÜM ÖĞRENCİLERİN GÖRÜNTÜ EKRANI'nı seçtiğimde hiçbir kayıt gösterilmiyor. Bu küçük bir problem, lütfen bunu nasıl düzelteceğinizi önerin.txt dosyasını (yapıları içeren) bağlı listeye kopyalama c
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
struct phbook
{
int number;
char name[20];
int mark;
struct part *next;
};
//struct phbook *find_student(int number);
//void insertFull(struct phbook* list, int number, char Name[10],int mark);
struct phbook* insert(struct phbook *list);
struct phbook* insertFull(struct phbook* list,
int number,
char Name[10],
int mark);
void readFile(struct phbook* list);
int main(void)
{
struct phbook *list = NULL;
int code;
int opt1;
int courses, i, k, j, counter;
for (;;)
{
printf("Enter operation code: \n");
printf("(1) ADD NEW STUDENT DETAILS: \n");
printf("(2) SEARCH STUDENT DETAILS: \n");
printf("(3) DISPLAY REPORT OF ALL STUDENTS: \n");
printf("(4) SAVE ALL STUDENT RECORDS TO EXTERNAL FILE: \n");
printf("(5) LOAD ALL STUDENT RECORDS FROM EXTERNAL FILE: \n");
scanf(" %d", &code);
switch (code)
{
case 1:
list = insert(list);
break;
case 2: //search();
break;
break;
case 3:
print(list);
break;
case 4:
saveToFile(list);
break;
case 5:
readFile(list);
break;
default:
printf("Illegal code\n");
}
printf("\n");
}
}
/*struct phbook *find_student(int number)
{
struct phbook *p;
for (p = list; p != NULL && number != p->number; p = p->next);//was sorted
if (p != NULL && number == p->number)
return p;
return NULL;
}*/
struct phbook* insert(struct phbook *list)
{
struct phbook *cur;
struct phbook *prev;
struct phbook *new_node;
new_node = (struct phbook*) malloc(sizeof(struct phbook));
if (new_node == NULL)
{
printf("db full er1.\n");
return NULL;
}
printf("enter student id");
scanf("%d", &new_node->number);
for (cur = list, prev = NULL; cur != NULL && new_node->number > cur->number;
prev = cur, cur = cur->next)
;
printf("Enter name: ");
scanf("%s", &new_node->name); //readline(new_node->name, NAME_LEN)
printf("Enter MARK: ");
scanf("%d", &new_node->mark);
new_node->next = cur;
if (prev == NULL)
list = new_node;
else
prev->next = new_node;
return list;
}
void search(void)
{
int number;
struct phbook *p;
printf("Enter ID: ");
scanf("%d", &number);
p = find_student(number);
if (p != NULL)
{
printf("Name: %s\n", p->name);
printf("Marks: %d\n", p->mark);
}
else
printf("student not found.\n");
}
void print(struct phbook *list)
{
struct phbook *p;
printf("Student_Number Student_Name Student_Mark\n");
for (p = list; p != NULL; p = p->next)
printf("%7d %-25s %d\n", p->number, p->name, p->mark);
}
void saveToFile(struct phbook *list)
{
FILE* fp;
fp = fopen("results.txt", "w");
struct phbook* cur = list; //he
while (cur != NULL)
{
fprintf(fp, "%s\n", list->name);
fprintf(fp, "%d\n", cur->number);
fprintf(fp, "%d\n", cur->mark);
cur = cur->next;
}
fclose(fp);
}
void readFile(struct phbook* list)
{
FILE* fp;
if (!(fp = fopen("results.txt", "r")))
printf("File NOT Found");
else
{
struct phbook *cur;
struct phbook *prev;
char TempName[10];
int TempNumber;
int TempMark;
int done = 0;
int count = 0;
int success; //dummy
cur = list; //sets it to the head (first nde of ll)
if (list == NULL)
;
printf("List is null\n");
if (cur == NULL)
printf("List is null\n");
while (cur != NULL)
{
cur = cur->next;
}
while (done == 0)
{
success = fscanf(fp, "%s", TempName);
if (success == 1)
{
success = fscanf(fp, "%d", &TempNumber);
if (success == 1)
{
success = fscanf(fp, "%d", &TempMark);
if (success == 1)
{
insertFull(list, TempNumber, TempName, TempMark);
}
}
}
else
{
done = 1;
}
}
}
}
struct phbook* insertFull(struct phbook* list,
int number,
char Name[10],
int mark)
{
struct phbook *cur;
struct phbook *prev;
struct phbook *new_node;
new_node = (struct phbook*) malloc(sizeof(struct phbook));
if (new_node == NULL)
{
printf("db full er1.\n");
return;
}
for (cur = list, prev = NULL; cur != NULL && new_node->number > cur->number;
prev = cur, cur = cur->next)
;
new_node->number = number;
new_node->mark = mark;
strcpy(new_node->name, Name);
new_node->next = cur;
if (prev == NULL)
list = new_node;
else
prev->next = new_node;
return list;
}
ekran görüntüsü şudur: şu şekildedir:
Benim kodudur buraya geldiğimde
ekran görüntüsü zaten MIA oldu - user4581301
bazı küçük kodlama hataları düzeltildi eksik prototipler
eklendi, bu yüzden kod biçimlendirilmiş zaman C+++ etiketi kaldırıldı . Yine de ekran görüntüsünün nerede olduğu hakkında bir ipucu yok. – user4581301bize ne bildiğini anlat. Giriş/yazma çalışıp çalışmadığını görmek için çıktı dosyasını bir editörle açtın mı? İşte bir ipucu; Ekleme işleminden veri girişini ayırın. Artık kullanıcı girişine ihtiyaç duymayan test koduyla ekleme işlemini test edebilirsiniz. bilinen değerlere sahip bir veya daha fazla eki arayabilirsiniz. operasyonunu test etmek için. –
Derleyici uyarılarınızı kontrol edin. Yapmazsan birkaç kötü sürprizin var. Örneğin, 'insertFull', hiçbir şey döndürmeyen bir dönüşe sahiptir. Bu davayı yürütürseniz program yanlış davranacaktır. – user4581301