Mode console de linux

Soyez le premier à donner votre avis sur cette source.

Vue 4 104 fois - Téléchargée 183 fois

Description

Ce programme fait une simulation de la gestion d?utilisateur sous linux et se présente comme suit:
A la première utilisation on crée root, pour cela on demande le son mot de passe, son nom et
son prénom. Le login sera ??root?? et, l?uid ainsi que le gid sont à 0.
Quand le user se connecte pour la première fois le manuel est affiché et ,après l?appui
d?une touche il a une ligne de commande ou il pourra effectuer ses différentes
opérations.
MANUEL
Processus : commande paramètre
Pour
L?ajout d'un utilisateur: adduser <nom_user>
Suppression d'1 user: deluser <nom_user>
recherche d'1 user: search <nom_user>
affichage des users: ls
affichage par groupe: lsgid
changer de user: su <nom_user>
changer de groupe: sg
changer de mot de passe(user connecté): passwd
deconnexion : shutdown
nombre de users: nbuser
manuel des cmdes: man
effacer l'écran: clear
QUITTER: exit

NB :
Les cmdes dont les parametres ne sont pas specifies s?exécutent sans paramètres.

Source / Exemple :


 
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<dos.h>
#include<time.h>
typedef struct user{
char id[20];
int uid;
char mp[20];
int gid;
char nom[20];
char prenom[20];
user *suiv;
}user;
user *tete,*corps,*queue;
int uid=500;
char ncmd[20],pcmd[20];
void remplir()
{char c;
int i=0,x,y;
queue->uid=++uid;
randomize();
queue->gid=rand()%1000;
printf("Mot de passe:");
while((c=getch())!='\r')
{
if(c=='\b')
{
if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
queue->mp[i]=c;
printf("*");
i++;
}
}
queue->mp[i]='\0';
printf("\n NOM :");
scanf("%s",queue->nom);
printf("PRENOM:");
scanf("%s",queue->prenom);
}
void creation()
{char c;
int i=0,j,x,y;
clrscr();
tete=NULL;
delay(800);
printf("\n\n\n\n\n\n\n\nCr?ation du compte root");
for(j=1;j<=10;j++)
{
printf(". ");delay(100); }
clrscr();
tete=(user*)malloc(sizeof(user));
strcpy(tete->id,"root");
tete->uid=0;
tete->gid=0;
printf("Mot de passe:");
while((c=getch())!='\r')
{
if(c=='\b')
{ if(i!=0)
{
i--;
printf("\b");
clreol();
}
}
else
{
tete->mp[i]=c;
printf("*");
i++;
}
}
tete->mp[i]='\0';
printf("\n NOM :");
scanf("%s",tete->nom);
printf("PRENOM:");
scanf("%s",tete->prenom);
tete->suiv=NULL;
queue=tete;
}

void adduser(char id[20])
{

if(strcmp(tete->id,id)==0)
printf("vous ne pouvez pas recr?er root\n");
else
{
queue->suiv=(user*)malloc(sizeof(user));
queue=queue->suiv;
strcpy(queue->id,id);
remplir();
queue->suiv=NULL;
}
}
int search_user_by_id(char *idr)
{
int bool=0;
corps=tete;
while(corps!=NULL)
{
if(strcmp(corps->id,idr)==0)
{bool=1;
break;
}
else
corps=corps->suiv;
}
return bool;
}

int verification(char *id,char *mp)
{
int bool=0;
corps=tete;
while(corps!=NULL)
{
if((strcmp(corps->id,id)==0)&&(strcmp(corps->mp,mp)==0))
{bool=1;
break;
}
else
corps=corps->suiv;
}
return bool;
}
void deluser(char *supp)
{
user *p1,*p2;
if(strcmp(tete->id,supp)==0)
printf("\nvous ne pouvez pas supprimer root \n");
else
{
if(search_user_by_id(supp)==1)
{
p1=tete; p2=tete->suiv;
while((p2->suiv!=NULL)&&(strcmp(p2->id,supp)!=0))
{
p1=p2; p2=p2->suiv;
}
p1->suiv=p2->suiv;
if(p1->suiv==NULL)
queue=p1;
free(p2);
}
else
printf("Suppression impossible:Ce user n'existe pas");
}
}
void list_user()
{
corps=tete;
printf("id:uid:mot de passe:gid:nom prenom\n");
while(corps!=NULL)
{
printf("%s : %d : %d : %d : %s : %s \n",corps->id,corps->uid,0,corps->gid,corps->nom,corps->prenom);
corps=corps->suiv;
}

}
int nb_user()
{
int i=0;
corps=tete;
while(corps!=queue->suiv)
{
i++;
corps=corps->suiv;
}
return i;
}

////////////////////////
void list_by_gid()
{int n1,n=nb_user(),i=0,t[20],j,k;
corps=tete;
while(corps!=NULL)
{t[i]=corps->gid; corps=corps->suiv;
i++;
}
n1=n=i;
for(k=0;k<n-1;k++)
{
for(i=k+1;i<n;i++)
if(t[k]==t[i])
{
for(j=i;j<n;j++)
{
t[j]=t[j+1];
n1--;
}
}
}
printf("\n------------------------------- \n");
i=0;
while(i<n1)
{
corps=tete;
printf("Groupe %d: ",t[i]);
do
{
if(corps->gid==t[i])
printf("%s \t",corps->id);
corps=corps->suiv;
}
while(corps!=NULL);
printf("\n-------------------------------\n");
i++;
}
}

void menu()
{
clrscr();
printf(" MANUEL\n");
printf(" processus : commande\n\n");
printf(" ajout d'un user: adduser <nom_user>\n");
printf(" suppression d'1 user: deluser <nom_user>\n");
printf(" recherche d'1 user: search <nom_user>\n");
printf(" affichage des users: ls\n");
printf(" affichage par groupe: lsgid\n");
printf(" changer de user: su <nom_user>\n");
printf(" changer de groupe: sg\n");
printf(" changer de mot de passe: passwd\n");
printf(" deconnexion: shutdown\n");
printf(" nombre de users: nbuser\n");
printf(" manuel des cmdes: man\n");
printf(" effacer l'ecran: clear\n");
printf(" QUITTER: exit\n");
}
////////////
void presentation()
{
int i=0;
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n\n\ **************");delay(500);
printf(" BIENVENUE ");delay(500);printf("**************");delay(500);
clrscr(); printf("\n\n\n\n\n\nPROJET ALGO\n\n"); delay(500);clrscr();
printf("\n\n\n\THEME:GESTION D'UTILISATEURS SOUS LINUX\n\n");delay(1000);
printf("\n\n\nAPPUYER SUR 1 TOUCHE POUR CONTINUER:");
getch();
clrscr();
for(i=1;i<=10;i++)
{
printf(". ");delay(100); }
clrscr();
}
////////////////////
void goodbye()
{int i;
clrscr();
printf("\n\n\n\n\n\n\n\n\n");
for(i=1;i<=7;i++)
{
printf(". ");delay(200); }
printf("fermeture");
for(i=1;i<=7;i++)
{
printf(". ");delay(200); } delay(2000);
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n A\n");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" U");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" R");
delay(100); gotoxy(wherex()+1,wherey()-1);
textcolor(142);
printf(" E");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" V");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" O");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" I");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" R");
delay(500);
clrscr();
printf("\n\n\n\n\n\n\n A\n");
delay(100);
printf(" U\n");
delay(100);
printf(" R\n");
delay(100);
textcolor(130);
printf(" E\n");
delay(100);
printf(" V\n");
textcolor(132);
delay(100);
printf(" O\n");
delay(100);
printf(" I\n");
delay(100);
printf(" R\n");
delay(2000);
}
///////////////////
void main()
{
char *c,*supp,*p,*idr,a,b,*log;
int i,j,k,x=0;
clrscr();
textmode(1);textcolor(15);
presentation();
printf("\n\n\n\n\n\n\n Vs devez cr?er Root pour commencer\n");
printf("\n\n\nAPPUYER SUR 1 TOUCHE POUR CONTINUER:");
getch();

creation();
clrscr();
textmode(2);textcolor(15);
printf("login:");
scanf("%s",c);
do
{
i=0;
printf("Mot de passe:");
while((a=getch())!='\r')
{
if(a=='\b')
{ if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
p[i]=a;
printf("*");
i++;
}
}
p[i]='\0';
if(verification(c,p)!=1)
{
printf("\nlogin ou mot de passe incorrect\n");
printf("login:");
scanf("%s",c);
}
else
{
if(x==0)
{
for(i=1;i<=11;i++)
{
printf(". ");delay(200); }
printf("\n");
textcolor(15);
menu();
printf("\nAPPUYER SUR 1 TOUCHE POUR CONTINUER:");
getch();
printf("\n\n please wait:");
for(i=1;i<=40;i++)
{
printf(". ");delay(200); }
clrscr();
x=1;
}
else printf("\n");
do
{
cprintf("#%s@localhost:\\>",c);
j=0;
while(((b=getchar())!=' ')&&(b!='\n'))
{ncmd[j]=b;j++;
}
ncmd[j]='\0';
{
if(strcmp(ncmd,"adduser")==0)
{if(strcmp(c,"root")==0)
{k=0;
while((a=getchar())!='\n')
{pcmd[k]=a;k++;
}
pcmd[k]='\0';
adduser(pcmd); getch();
strcpy(ncmd,"\0");
}
else
{printf("Seul root dispose des autorisations necessaires\n"); getch(); }

}
else
if(strcmp(ncmd,"deluser")==0)
{
clrscr();
if(strcmp(c,"root")==0)
{
k=0;
while((a=getchar())!='\n')
{pcmd[k]=a;k++;
}
pcmd[k]='\0';
strcpy(supp,pcmd);
deluser(supp);
}
else {printf("Seul root dispose des autorisations necessaires\n");
getch(); }
}
if(strcmp(ncmd,"search")==0)
{
k=0;
while((b=getchar())!='\n')
{pcmd[k]=b;k++;
}
pcmd[k]='\0';
strcpy(idr,pcmd);
if(search_user_by_id(idr)!=1)
printf("\nUtilisateur non pr?sent\n");
else
printf("\nUtilisateur pr?sent\n");
getch();
}
else
if(strcmp(ncmd,"ls")==0)
{list_user(); getch();}
else
if(strcmp(ncmd,"lsgid")==0)
{list_by_gid();getch();}
else
if(strcmp(ncmd,"nbuser")==0)
{printf("Le nombre de users est: %d \n",nb_user());getch();}
else
if(strcmp(ncmd,"sg")==0)
{printf("entrez votre nouveau gid:");
if(search_user_by_id(c)==1)
scanf("%d",&corps->gid);
getch();}
else
if(strcmp(ncmd,"passwd")==0)
{printf("entrez votre ancien mot passe:");
i=0;
while((a=getch())!='\r')
{
if(a=='\b')
{ if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
p[i]=a;
printf("*");
i++;
}
}
p[i]='\0';
if(search_user_by_id(c)==1)
{
if(strcmp(corps->mp,p)==0)
{
printf("\nentrez votre nouveau mot passe:");
i=0;
while((a=getch())!='\r')
{
if(a=='\b')
{ if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
p[i]=a;
printf("*");
i++;
}
}
p[i]='\0';
strcpy(corps->mp,p);
printf("\n");
}
else
printf("\nle mot de passe n'est pa bon r?essayer une autre fois\n");
}
getch();}
else
if((strcmp(ncmd,"su"))==0)
{ k=0;
while((a=getchar())!='\n')
{pcmd[k]=a;k++;
}
pcmd[k]='\0';
if(k==0)
{strcpy(c,"root");break;}
else
{strcpy(log,c);
strcpy(c,pcmd);
if(strcmp(log,"root")!=0)
break;}
}
else
if((strcmp(ncmd,"man"))==0)
{menu();getch();}
else
if((strcmp(ncmd,"shutdown"))==0)
{clrscr(); printf("login:");scanf("%s",c);break; }
else
if((strcmp(ncmd,"clear"))==0)
clrscr();
else
if((strcmp(ncmd,"exit"))==0)
{textmode(1);textcolor(130);goodbye();exit(0);}
else
if((strcmp(ncmd,""))==0)
{gotoxy(1,wherey());clreol();
}
else
printf("command not found\n");
}
}while((strcmp(ncmd,"shutdown"))!=0);
}
}while((strcmp(ncmd,"exit"))!=0);

}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
51
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
13 mars 2011
1
salut
Pour augmenter la clarté de ton code, tu devrais (vous devriez) aussi utiliser plusieurs fichiers sources, commenter ton code, et, mais c'est peut être une question de gouts personnels, séparer ton code en plus de fonction que ça ! J'en ai compté 12 en tout, ca me parait peu pour une source de plus de 500 lignes.
Sinon y'a des trucs qui servent absolument a RIEN ! comme ca :

# for(j=1;j<=10;j++)
# {
# printf(". ");delay(100); }
# clrscr();
(lignes 55 et suivantes)
a part faire perd du temps a l'utilisateur... je vois pas l'intérêt de la chose.

Et puis si j'ai bien compris c'est un projet scolaire. Ne crois pas que ton prof va t'évaluer sur l'aspect "joli" de l'interface utilisateur. Ca sert a rien de lui en mettre "plein la vue", il sait surement faire ca mieux que toi. Ce qui est important c'est que ton code soit propre, clair et qu'il marche, SANS BUG. d'ailleurs, je ne vois jamais quand est ce que tu alloues ta mémoire dans main(), et encore moins quand tu testes les dépassements mémoire. Je me demande comment ton code peux marcher !

Bref, désolé mais t'as encore du pain sur la planche !
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011

Salut, illisible tout comme la description (même si ce n'est pas ta faute). Tout comme le manque d'efforts sur l'orthographe et la grammaire des textes. =/
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
tu devrais indenter ton programme, la il est illisible.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.