Ich bin neu zu c und ich habe versucht, einen Code für ein Mitarbeiterregister zu schreiben und habe viele Lösungen online gefunden, aber ich habe noch Fragen, deren Antworten ich noch nicht gefunden habe.Employee Register usinf Datei IO und doppelt verkettete Liste
Ich habe meinen Code unten beigefügt. Probleme: 1. Anfangs versuchte ich direkt Werte in die Datei ohne eine doppelt verknüpfte Liste zu speichern und so könnten Sie Teile dieses Codes auch finden.
2.I versucht haben, wie eine doppelt verknüpfte Liste aus der Datei zu erstellen, aber Wie lagere Sie unterschiedliche Werte einer Zeile in verschiedene Variablen ?: Code in main()
3. tun Sie schreiben die gesamte Liste in die Datei zurück (nach der Eingabe zu nehmen und es in der doppelt verknüpften Liste zu speichern): Code im Einsatz/ist hier
Mein gesamte Code aktualisieren: /*
* C Program to Create Employee Record and Update it
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 200
struct emp
{
int id;
char *name;
char gender;
char *department;
int salary;
struct emp *prev;
struct emp *next;
}*emp1, *emp3;
void display();
void create();
void update();
FILE *fp, *fp1;
int count = 0;
void main()
{
int i, n, ch;
char line[128];
struct emp *current, *head;
head = current = NULL;
fp = fopen("register.txt", "r");
while(fgets(line, sizeof(line), fp))
{
struct emp *node = malloc(sizeof(LIST));
node->string = strdup(line); // how to store multiple values in a line into multiple fields?
node->next =NULL;
node->prev=NULL;
if(head == NULL)
{
current = head = node;
}
else
{
current = current->next = node;
node->left=current;
}
}
fclose(fp);
//test print
for(current = head; current ; current=current->next){
printf("%s", current->string);
}
//need free for each node
return 0;
printf("1] Create a new Record\n");
printf("2] Display a Record\n");
printf("3] Update Records\n");
printf("4] Delete a record\n");
printf("5] Exit");
while (1)
{
printf("\nEnter your choice : ");
scanf("%d", &ch);
switch (ch)
{
case 1:
//fp = fopen("register.txt", "a");
create();
break;
case 2:
//fp1 = fopen("register.txt","rb");
display();
break;
case 3:
//fp1 = fopen("register.txt", "r+");
update();
break;
case 4:
//fp1 = fopen("register.txt", "r+");
display();
break;
case 5:
exit(0);
}
}
}
/* To create an employee record */
void create()
{
int i,success1,success2;
char *p;
emp1 = (struct emp *)malloc(sizeof(struct emp));
emp1->name = (char *)malloc((size)*(sizeof(char)));
printf("Enter name of employee : ");
//getchar();
scanf(" %[^\n]s", emp1->name);
printf("Enter emp id : ");
success1 = scanf("%d", &emp1->id);
while (success1 < 1)
{
printf("Invalid ID. Enter numbers only!\n");
printf("Enter emp id : ");
getchar();
//getchar();
success1 = scanf("%d", &emp1->id);
}
printf("Enter gender of employee : ");
getchar();
emp1->gender=getchar();
printf("%s",&emp1->gender);
//printf("%s",&emp1->gender);
//if(emp1->gender=='m')
//printf("hey");
while(1){
if(emp1->gender=='m'||emp1->gender=='M'||emp1->gender=='f'||emp1->gender=='F')
{
break;
}
else
{
printf("Enter only M or F\n ");
printf("Enter gender of employee : ");
getchar();
emp1->gender=getchar();
//printf("%s",&emp1->gender);
}
}
//getchar();
//printf("Enter department of employee : ");
//getchar();
// scanf("%[^\n]s", emp1->department);
//getchar();
printf("Enter salary of employee : ");
success2 = scanf("%d", &emp1->salary);
while (success2 < 1)
{
printf("Enter salary amount in numbers only!\n");
printf("Enter salary of employee : ");
getchar();
//getchar();
success2 = scanf("%d", &emp1->salary);
}
emp1->prev=head;
head->next=emp1;
emp1->next=NULL;
/*fwrite(&emp1->id, sizeof(emp1->id), 1, fp);
fwrite(emp1->name, size, 1, fp);
fwrite(&emp1->gender, sizeof(emp1->gender), 1, fp);
// fwrite(emp1->department, size, 1, fp);
fwrite(&emp1->salary, sizeof(emp1->salary), 1, fp);
count++; // count to number of entries of records
fclose(fp);
*/
}
/* Display the records in the file */
void display()
{
emp1=(struct emp *)malloc(1*sizeof(struct emp));
emp1->name=(char *)malloc(size*sizeof(char));
int i = 1,opt,num;
char *strng;
emp1=head;
if (fp1 == NULL)
{
printf("\nFile not opened for reading");
return;
}
printf("\n1.View by employee name\n2.View by employee ID\n3.View by salary\n4.View by Department\n5.Exit\n");
scanf(" %d", &opt);
switch(opt){
case 1:
printf("Enter employee name: ");
scanf(" %[^\n]s", strng);
while(emp1->next!=NULL)
{
if(emp1->name==strng)
printf("\nEmployee Name: %s\nEmployee ID: %d\nEmployee Gender: %s\nEmployee Salary: %d",emp3->name,emp3->id,&emp1->gender,emp1->salary);
else emp1=emp1->next;
}
//////OTHER CASES SIMILAR WAY
}
//fclose(fp1);
//free(emp3->name);
//free(emp3);
}
void update()
{
int id, flag = 0, i = 1;
char s[size];
if (fp1 == NULL)
{
printf("File cant be opened");
return;
}
printf("Enter employee id to update : ");
scanf("%d", &id);
emp1 = (struct emp *)malloc(1*sizeof(struct emp));
emp1->name=(char *)malloc(size*sizeof(char));
while(emp1->next!=NULL)
{
if (id == emp1->id)
{
printf("Enter new values");
////All values will be taken and stored in emp1
}
}
}
Jede Hilfe wird geschätzt und sehr benötigt !! Danke :)
abrufen Es wäre toll, wenn Sie die erforderlichen Änderungen vornehmen und den gesamten Code veröffentlichen könnten. Bitte! Vielen Dank! – Ana
Nein Ich kann Ihren unvollständigen Code nicht kritisch analysieren ("LIST" ist nicht definiert). Bitte stellen Sie eine bestimmte Frage und veröffentlichen Sie das [minimale, vollständige und überprüfbare Beispiel] (http://stackoverflow.com/help/mcve), das das Problem zeigt. –
nicht LISTE. Entschuldigung, struct emp – Ana